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 2024/11/26 14:47:55 UTC

(hbase-site) branch asf-site updated: Published site at a735effa7a34ef1dff08ed5ad33d833f2b68aa66.

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 c13107037d8 Published site at a735effa7a34ef1dff08ed5ad33d833f2b68aa66.
c13107037d8 is described below

commit c13107037d8760fdd53ddf3768e1c314e7f46cae
Author: jenkins <bu...@apache.org>
AuthorDate: Tue Nov 26 14:47:32 2024 +0000

    Published site at a735effa7a34ef1dff08ed5ad33d833f2b68aa66.
---
 acid-semantics.html                                |    2 +-
 apache_hbase_reference_guide.pdf                   |    4 +-
 apidocs/index-all.html                             |   26 +-
 apidocs/member-search-index.js                     |    2 +-
 .../org/apache/hadoop/hbase/PrivateCellUtil.html   | 6151 ++++++++++----------
 .../apache/hadoop/hbase/filter/FuzzyRowFilter.html |  261 +-
 .../apache/hadoop/hbase/filter/PrefixFilter.html   |  369 +-
 book.html                                          |    2 +-
 bulk-loads.html                                    |    2 +-
 checkstyle-aggregate.html                          |   18 +-
 checkstyle.rss                                     |  664 +--
 coc.html                                           |    2 +-
 dependencies.html                                  |    2 +-
 dependency-convergence.html                        |    2 +-
 dependency-info.html                               |    2 +-
 dependency-management.html                         |    2 +-
 devapidocs/index-all.html                          |    6 +-
 devapidocs/member-search-index.js                  |    2 +-
 ...rivateCellUtil.EmptyByteBufferExtendedCell.html |   62 +-
 .../hadoop/hbase/PrivateCellUtil.EmptyCell.html    |   42 +-
 ...eCellUtil.FirstOnRowByteBufferExtendedCell.html |   26 +-
 .../hbase/PrivateCellUtil.FirstOnRowCell.html      |   26 +-
 ...llUtil.FirstOnRowColByteBufferExtendedCell.html |   32 +-
 .../hbase/PrivateCellUtil.FirstOnRowColCell.html   |   32 +-
 ...Util.FirstOnRowColTSByteBufferExtendedCell.html |   12 +-
 .../hbase/PrivateCellUtil.FirstOnRowColTSCell.html |   12 +-
 ...PrivateCellUtil.FirstOnRowDeleteFamilyCell.html |   26 +-
 ...teCellUtil.LastOnRowByteBufferExtendedCell.html |   26 +-
 .../hbase/PrivateCellUtil.LastOnRowCell.html       |   26 +-
 ...ellUtil.LastOnRowColByteBufferExtendedCell.html |   32 +-
 .../hbase/PrivateCellUtil.LastOnRowColCell.html    |   32 +-
 ...eCellUtil.TagRewriteByteBufferExtendedCell.html |   82 +-
 .../hbase/PrivateCellUtil.TagRewriteCell.html      |   62 +-
 ...l.ValueAndTagRewriteByteBufferExtendedCell.html |   26 +-
 .../PrivateCellUtil.ValueAndTagRewriteCell.html    |   26 +-
 .../org/apache/hadoop/hbase/PrivateCellUtil.html   |  411 +-
 .../apache/hadoop/hbase/filter/FuzzyRowFilter.html |   29 +-
 .../apache/hadoop/hbase/filter/PrefixFilter.html   |   79 +-
 .../class-use/FuzzyRowFilter.RowTracker.html       |    2 +-
 .../apache/hadoop/hbase/util/class-use/Pair.html   |    2 +-
 ...rivateCellUtil.EmptyByteBufferExtendedCell.html | 6151 ++++++++++----------
 .../hadoop/hbase/PrivateCellUtil.EmptyCell.html    | 6151 ++++++++++----------
 ...eCellUtil.FirstOnRowByteBufferExtendedCell.html | 6151 ++++++++++----------
 .../hbase/PrivateCellUtil.FirstOnRowCell.html      | 6151 ++++++++++----------
 ...llUtil.FirstOnRowColByteBufferExtendedCell.html | 6151 ++++++++++----------
 .../hbase/PrivateCellUtil.FirstOnRowColCell.html   | 6151 ++++++++++----------
 ...Util.FirstOnRowColTSByteBufferExtendedCell.html | 6151 ++++++++++----------
 .../hbase/PrivateCellUtil.FirstOnRowColTSCell.html | 6151 ++++++++++----------
 ...PrivateCellUtil.FirstOnRowDeleteFamilyCell.html | 6151 ++++++++++----------
 ...teCellUtil.LastOnRowByteBufferExtendedCell.html | 6151 ++++++++++----------
 .../hbase/PrivateCellUtil.LastOnRowCell.html       | 6151 ++++++++++----------
 ...ellUtil.LastOnRowColByteBufferExtendedCell.html | 6151 ++++++++++----------
 .../hbase/PrivateCellUtil.LastOnRowColCell.html    | 6151 ++++++++++----------
 ...eCellUtil.TagRewriteByteBufferExtendedCell.html | 6151 ++++++++++----------
 .../hbase/PrivateCellUtil.TagRewriteCell.html      | 6151 ++++++++++----------
 ...l.ValueAndTagRewriteByteBufferExtendedCell.html | 6151 ++++++++++----------
 .../PrivateCellUtil.ValueAndTagRewriteCell.html    | 6151 ++++++++++----------
 .../org/apache/hadoop/hbase/PrivateCellUtil.html   | 6151 ++++++++++----------
 .../hadoop/hbase/filter/FuzzyRowFilter.Order.html  |  261 +-
 .../hbase/filter/FuzzyRowFilter.RowTracker.html    |  261 +-
 .../hbase/filter/FuzzyRowFilter.SatisfiesCode.html |  261 +-
 .../apache/hadoop/hbase/filter/FuzzyRowFilter.html |  261 +-
 .../apache/hadoop/hbase/filter/PrefixFilter.html   |  369 +-
 downloads.html                                     |    2 +-
 export_control.html                                |    2 +-
 index.html                                         |    2 +-
 issue-management.html                              |    2 +-
 licenses.html                                      |    2 +-
 mailing-lists.html                                 |    2 +-
 metrics.html                                       |    2 +-
 old_news.html                                      |    2 +-
 plugin-management.html                             |    2 +-
 plugins.html                                       |    2 +-
 poweredbyhbase.html                                |    2 +-
 project-info.html                                  |    2 +-
 project-reports.html                               |    2 +-
 pseudo-distributed.html                            |    2 +-
 replication.html                                   |    2 +-
 resources.html                                     |    2 +-
 scm.html                                           |    2 +-
 sponsors.html                                      |    2 +-
 summary.html                                       |    2 +-
 supportingprojects.html                            |    2 +-
 team.html                                          |    2 +-
 testapidocs/index-all.html                         |   94 +-
 testapidocs/member-search-index.js                 |    2 +-
 .../hadoop/hbase/filter/TestFuzzyRowFilter.html    |  334 +-
 .../hbase/filter/TestFuzzyRowFilterEndToEnd.html   |  692 ++-
 testdevapidocs/index-all.html                      |   74 +-
 testdevapidocs/member-search-index.js              |    2 +-
 .../hadoop/hbase/filter/TestFuzzyRowFilter.html    |    4 +-
 .../hbase/filter/TestFuzzyRowFilterEndToEnd.html   |   44 +-
 .../hadoop/hbase/filter/TestFuzzyRowFilter.html    |  334 +-
 .../hbase/filter/TestFuzzyRowFilterEndToEnd.html   |  692 ++-
 94 files changed, 61774 insertions(+), 61295 deletions(-)

diff --git a/acid-semantics.html b/acid-semantics.html
index dc94b4bf20e..82101e83de3 100644
--- a/acid-semantics.html
+++ b/acid-semantics.html
@@ -468,7 +468,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2024-11-22
+        Last Published: 2024-11-26
       </div>
         </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 4e67426f323..935421f9251 100644
--- a/apache_hbase_reference_guide.pdf
+++ b/apache_hbase_reference_guide.pdf
@@ -5,8 +5,8 @@
 /Author (Apache HBase Team)
 /Creator (Asciidoctor PDF 2.0.6, based on Prawn 2.4.0)
 /Producer (Apache HBase Team)
-/ModDate (D:20241122143721+00'00')
-/CreationDate (D:20241122151821+00'00')
+/ModDate (D:20241126143058+00'00')
+/CreationDate (D:20241126144451+00'00')
 >>
 endobj
 2 0 obj
diff --git a/apidocs/index-all.html b/apidocs/index-all.html
index bf69a4d1a69..8a1ea835048 100644
--- a/apidocs/index-all.html
+++ b/apidocs/index-all.html
@@ -5096,7 +5096,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt>call(O) - Method in class org.apache.hadoop.hbase.coprocessor.CoprocessorHost.ObserverOperationWithResult</dt>
 <dd>&nbsp;</dd>
-<dt>call(AbstractRpcBasedConnectionRegistry.Callable&lt;T&gt;, Predicate&lt;T&gt;, String) - Method in class org.apache.hadoop.hbase.client.MasterRegistry</dt>
+<dt>call(AbstractRpcBasedConnectionRegistry.Callable&lt;T&gt;, Predicate&lt;T&gt;, String) - Method in class org.apache.hadoop.hbase.client.RpcConnectionRegistry</dt>
 <dd>&nbsp;</dd>
 <dt>call(HBaseRpcController, AdminProtos.AdminService.Interface) - Method in interface org.apache.hadoop.hbase.client.AsyncAdminRequestRetryingCaller.Callable</dt>
 <dd>&nbsp;</dd>
@@ -7140,7 +7140,7 @@ loadScripts(document, 'script');</script>
 </dd>
 <dt>close() - Method in class org.apache.hadoop.hbase.chaos.ChaosAgent</dt>
 <dd>&nbsp;</dd>
-<dt>close() - Method in class org.apache.hadoop.hbase.client.MasterRegistry</dt>
+<dt>close() - Method in class org.apache.hadoop.hbase.client.RpcConnectionRegistry</dt>
 <dd>&nbsp;</dd>
 <dt>close() - Method in interface org.apache.hadoop.hbase.client.Admin</dt>
 <dd>&nbsp;</dd>
@@ -9192,7 +9192,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt>conf - Variable in class org.apache.hadoop.hbase.regionserver.StoreFileReader</dt>
 <dd>&nbsp;</dd>
-<dt>conf - Variable in class org.apache.hadoop.hbase.regionserver.StripeStoreFlusher</dt>
+<dt>conf - Variable in class org.apache.hadoop.hbase.regionserver.DefaultStoreFlusher</dt>
 <dd>&nbsp;</dd>
 <dt>conf - Variable in class org.apache.hadoop.hbase.regionserver.wal.AbstractFSWAL</dt>
 <dd>
@@ -11872,7 +11872,7 @@ loadScripts(document, 'script');</script>
 <dd>
 <div class="block">Create a new Scan with a cursor.</div>
 </dd>
-<dt>createScanner(List&lt;KeyValueScanner&gt;, FlushLifeCycleTracker) - Method in class org.apache.hadoop.hbase.regionserver.StripeStoreFlusher</dt>
+<dt>createScanner(List&lt;KeyValueScanner&gt;, FlushLifeCycleTracker) - Method in class org.apache.hadoop.hbase.regionserver.DefaultStoreFlusher</dt>
 <dd>
 <div class="block">Creates the scanner for flushing snapshot.</div>
 </dd>
@@ -12408,7 +12408,7 @@ loadScripts(document, 'script');</script>
 <dd>
 <div class="block">Create a writer for writing new store files.</div>
 </dd>
-<dt>createWriter(MemStoreSnapshot, boolean, Consumer&lt;Path&gt;) - Method in class org.apache.hadoop.hbase.regionserver.StripeStoreFlusher</dt>
+<dt>createWriter(MemStoreSnapshot, boolean, Consumer&lt;Path&gt;) - Method in class org.apache.hadoop.hbase.regionserver.DefaultStoreFlusher</dt>
 <dd>&nbsp;</dd>
 <dt>createWriterInstance(FileSystem, Path) - Method in class org.apache.hadoop.hbase.regionserver.wal.AbstractFSWAL</dt>
 <dd>&nbsp;</dd>
@@ -18429,7 +18429,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt>finalizeWriter(StoreFileWriter, long, MonitoredTask) - Method in class org.apache.hadoop.hbase.mob.DefaultMobStoreFlusher</dt>
 <dd>&nbsp;</dd>
-<dt>finalizeWriter(StoreFileWriter, long, MonitoredTask) - Method in class org.apache.hadoop.hbase.regionserver.StripeStoreFlusher</dt>
+<dt>finalizeWriter(StoreFileWriter, long, MonitoredTask) - Method in class org.apache.hadoop.hbase.regionserver.DefaultStoreFlusher</dt>
 <dd>&nbsp;</dd>
 <dt>findArchivedLog(Path, Configuration) - Static method in class org.apache.hadoop.hbase.wal.AbstractFSWALProvider</dt>
 <dd>
@@ -19938,7 +19938,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt>getActiveLogFiles() - Static method in class org.apache.hadoop.hbase.logging.Log4jUtils</dt>
 <dd>&nbsp;</dd>
-<dt>getActiveMaster() - Method in class org.apache.hadoop.hbase.client.MasterRegistry</dt>
+<dt>getActiveMaster() - Method in class org.apache.hadoop.hbase.client.RpcConnectionRegistry</dt>
 <dd>&nbsp;</dd>
 <dt>getActiveMaster() - Method in interface org.apache.hadoop.hbase.client.ConnectionRegistry</dt>
 <dd>
@@ -21720,7 +21720,7 @@ loadScripts(document, 'script');</script>
 <dd>
 <div class="block">Returns the cluster definition</div>
 </dd>
-<dt>getClusterId() - Method in class org.apache.hadoop.hbase.client.MasterRegistry</dt>
+<dt>getClusterId() - Method in class org.apache.hadoop.hbase.client.RpcConnectionRegistry</dt>
 <dd>&nbsp;</dd>
 <dt>getClusterId() - Method in interface org.apache.hadoop.hbase.client.Connection</dt>
 <dd>
@@ -26866,7 +26866,7 @@ loadScripts(document, 'script');</script>
 </dd>
 <dt>getMetaRegionLocationCache() - Method in class org.apache.hadoop.hbase.HBaseServerBase</dt>
 <dd>&nbsp;</dd>
-<dt>getMetaRegionLocations() - Method in class org.apache.hadoop.hbase.client.MasterRegistry</dt>
+<dt>getMetaRegionLocations() - Method in class org.apache.hadoop.hbase.client.RpcConnectionRegistry</dt>
 <dd>&nbsp;</dd>
 <dt>getMetaRegionLocations() - Method in interface org.apache.hadoop.hbase.client.ConnectionRegistry</dt>
 <dd>
@@ -37325,7 +37325,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt>HEDGED_READS_DESC - Static variable in interface org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource</dt>
 <dd>&nbsp;</dd>
-<dt>HEDGED_REQS_FANOUT_DEFAULT - Static variable in class org.apache.hadoop.hbase.client.MasterRegistry</dt>
+<dt>HEDGED_REQS_FANOUT_DEFAULT - Static variable in class org.apache.hadoop.hbase.client.RpcConnectionRegistry</dt>
 <dd>
 <div class="block">Default value for the fan out of hedged requests.</div>
 </dd>
@@ -38555,6 +38555,8 @@ loadScripts(document, 'script');</script>
 </dd>
 <dt>increaseAboveHeapOccupancyLowWatermarkCounter() - Method in class org.apache.hadoop.hbase.regionserver.MetricsHeapMemoryManagerSourceImpl</dt>
 <dd>&nbsp;</dd>
+<dt>increaseLastNonMaxByte(byte[]) - Static method in class org.apache.hadoop.hbase.PrivateCellUtil</dt>
+<dd>&nbsp;</dd>
 <dt>increaseTunerDoNothingCounter() - Method in class org.apache.hadoop.hbase.regionserver.MetricsHeapMemoryManager</dt>
 <dd>
 <div class="block">Increase the counter for tuner neither expanding memstore global size limit nor expanding
@@ -51804,7 +51806,7 @@ service.</div>
 <dd>
 <div class="block">Performs compaction on a column family with the mob flag enabled.</div>
 </dd>
-<dt>performFlush(InternalScanner, CellSink, ThroughputController) - Method in class org.apache.hadoop.hbase.regionserver.StripeStoreFlusher</dt>
+<dt>performFlush(InternalScanner, CellSink, ThroughputController) - Method in class org.apache.hadoop.hbase.regionserver.DefaultStoreFlusher</dt>
 <dd>
 <div class="block">Performs memstore flush, writing data from scanner into sink.</div>
 </dd>
@@ -67997,7 +67999,7 @@ service.</div>
 </dd>
 <dt>store - Variable in class org.apache.hadoop.hbase.io.crypto.KeyStoreKeyProvider</dt>
 <dd>&nbsp;</dd>
-<dt>store - Variable in class org.apache.hadoop.hbase.regionserver.StripeStoreFlusher</dt>
+<dt>store - Variable in class org.apache.hadoop.hbase.regionserver.DefaultStoreFlusher</dt>
 <dd>&nbsp;</dd>
 <dt>store - Variable in class org.apache.hadoop.hbase.regionserver.StoreScanner</dt>
 <dd>&nbsp;</dd>
diff --git a/apidocs/member-search-index.js b/apidocs/member-search-index.js
index 9a3ea4cfc53..9f7182d8656 100644
--- a/apidocs/member-search-index.js
+++ b/apidocs/member-search-index.js
@@ -1 +1 @@
-memberSearchIndex = [{"p":"org.apache.hadoop.hbase.filter","c":"ParseConstants","l":"A"},{"p":"org.apache.hadoop.hbase.master","c":"RegionState.State","l":"ABNORMALLY_CLOSED"},{"p":"org.apache.hadoop.hbase.coprocessor","c":"CoprocessorHost","l":"ABORT_ON_ERROR_KEY"},{"p":"org.apache.hadoop.hdfs","c":"DummyDFSOutputStream","l":"abort()"},{"p":"org.apache.hadoop.hbase","c":"Abortable","l":"abort(String)","u":"abort(java.lang.String)"},{"p":"org.apache.hadoop.hbase","c":"Abortable","l":"abo [...]
\ No newline at end of file
+memberSearchIndex = [{"p":"org.apache.hadoop.hbase.filter","c":"ParseConstants","l":"A"},{"p":"org.apache.hadoop.hbase.master","c":"RegionState.State","l":"ABNORMALLY_CLOSED"},{"p":"org.apache.hadoop.hbase.coprocessor","c":"CoprocessorHost","l":"ABORT_ON_ERROR_KEY"},{"p":"org.apache.hadoop.hdfs","c":"DummyDFSOutputStream","l":"abort()"},{"p":"org.apache.hadoop.hbase","c":"Abortable","l":"abort(String)","u":"abort(java.lang.String)"},{"p":"org.apache.hadoop.hbase","c":"Abortable","l":"abo [...]
\ No newline at end of file
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/PrivateCellUtil.html b/apidocs/src-html/org/apache/hadoop/hbase/PrivateCellUtil.html
index 1cd247fbb44..7681e3d0e6b 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/PrivateCellUtil.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/PrivateCellUtil.html
@@ -40,3075 +40,3088 @@
 <span class="source-line-no">027</span><span id="line-27">import java.math.BigDecimal;</span>
 <span class="source-line-no">028</span><span id="line-28">import java.nio.ByteBuffer;</span>
 <span class="source-line-no">029</span><span id="line-29">import java.util.ArrayList;</span>
-<span class="source-line-no">030</span><span id="line-30">import java.util.Iterator;</span>
-<span class="source-line-no">031</span><span id="line-31">import java.util.List;</span>
-<span class="source-line-no">032</span><span id="line-32">import java.util.Map.Entry;</span>
-<span class="source-line-no">033</span><span id="line-33">import java.util.NavigableMap;</span>
-<span class="source-line-no">034</span><span id="line-34">import java.util.Optional;</span>
-<span class="source-line-no">035</span><span id="line-35">import org.apache.hadoop.hbase.filter.ByteArrayComparable;</span>
-<span class="source-line-no">036</span><span id="line-36">import org.apache.hadoop.hbase.io.TagCompressionContext;</span>
-<span class="source-line-no">037</span><span id="line-37">import org.apache.hadoop.hbase.io.util.Dictionary;</span>
-<span class="source-line-no">038</span><span id="line-38">import org.apache.hadoop.hbase.io.util.StreamUtils;</span>
-<span class="source-line-no">039</span><span id="line-39">import org.apache.hadoop.hbase.util.ByteBufferUtils;</span>
-<span class="source-line-no">040</span><span id="line-40">import org.apache.hadoop.hbase.util.ByteRange;</span>
-<span class="source-line-no">041</span><span id="line-41">import org.apache.hadoop.hbase.util.Bytes;</span>
-<span class="source-line-no">042</span><span id="line-42">import org.apache.hadoop.hbase.util.ClassSize;</span>
-<span class="source-line-no">043</span><span id="line-43">import org.apache.yetus.audience.InterfaceAudience;</span>
-<span class="source-line-no">044</span><span id="line-44"></span>
-<span class="source-line-no">045</span><span id="line-45">import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;</span>
-<span class="source-line-no">046</span><span id="line-46"></span>
-<span class="source-line-no">047</span><span id="line-47">/**</span>
-<span class="source-line-no">048</span><span id="line-48"> * Utility methods helpful slinging {@link Cell} instances. It has more powerful and rich set of</span>
-<span class="source-line-no">049</span><span id="line-49"> * APIs than those in {@link CellUtil} for internal usage.</span>
-<span class="source-line-no">050</span><span id="line-50"> */</span>
-<span class="source-line-no">051</span><span id="line-51">@InterfaceAudience.Private</span>
-<span class="source-line-no">052</span><span id="line-52">public final class PrivateCellUtil {</span>
-<span class="source-line-no">053</span><span id="line-53"></span>
-<span class="source-line-no">054</span><span id="line-54">  /**</span>
-<span class="source-line-no">055</span><span id="line-55">   * Private constructor to keep this class from being instantiated.</span>
-<span class="source-line-no">056</span><span id="line-56">   */</span>
-<span class="source-line-no">057</span><span id="line-57">  private PrivateCellUtil() {</span>
-<span class="source-line-no">058</span><span id="line-58">  }</span>
-<span class="source-line-no">059</span><span id="line-59"></span>
-<span class="source-line-no">060</span><span id="line-60">  /******************* ByteRange *******************************/</span>
-<span class="source-line-no">061</span><span id="line-61"></span>
-<span class="source-line-no">062</span><span id="line-62">  public static ByteRange fillRowRange(Cell cell, ByteRange range) {</span>
-<span class="source-line-no">063</span><span id="line-63">    return range.set(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength());</span>
-<span class="source-line-no">064</span><span id="line-64">  }</span>
-<span class="source-line-no">065</span><span id="line-65"></span>
-<span class="source-line-no">066</span><span id="line-66">  public static ByteRange fillFamilyRange(Cell cell, ByteRange range) {</span>
-<span class="source-line-no">067</span><span id="line-67">    return range.set(cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength());</span>
-<span class="source-line-no">068</span><span id="line-68">  }</span>
-<span class="source-line-no">069</span><span id="line-69"></span>
-<span class="source-line-no">070</span><span id="line-70">  public static ByteRange fillQualifierRange(Cell cell, ByteRange range) {</span>
-<span class="source-line-no">071</span><span id="line-71">    return range.set(cell.getQualifierArray(), cell.getQualifierOffset(),</span>
-<span class="source-line-no">072</span><span id="line-72">      cell.getQualifierLength());</span>
-<span class="source-line-no">073</span><span id="line-73">  }</span>
-<span class="source-line-no">074</span><span id="line-74"></span>
-<span class="source-line-no">075</span><span id="line-75">  public static ByteRange fillValueRange(Cell cell, ByteRange range) {</span>
-<span class="source-line-no">076</span><span id="line-76">    return range.set(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());</span>
-<span class="source-line-no">077</span><span id="line-77">  }</span>
-<span class="source-line-no">078</span><span id="line-78"></span>
-<span class="source-line-no">079</span><span id="line-79">  public static ByteRange fillTagRange(ExtendedCell cell, ByteRange range) {</span>
-<span class="source-line-no">080</span><span id="line-80">    return range.set(cell.getTagsArray(), cell.getTagsOffset(), cell.getTagsLength());</span>
-<span class="source-line-no">081</span><span id="line-81">  }</span>
-<span class="source-line-no">082</span><span id="line-82"></span>
-<span class="source-line-no">083</span><span id="line-83">  /********************* misc *************************************/</span>
-<span class="source-line-no">084</span><span id="line-84"></span>
-<span class="source-line-no">085</span><span id="line-85">  public static byte getRowByte(Cell cell, int index) {</span>
-<span class="source-line-no">086</span><span id="line-86">    if (cell instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">087</span><span id="line-87">      return ((ByteBufferExtendedCell) cell).getRowByteBuffer()</span>
-<span class="source-line-no">088</span><span id="line-88">        .get(((ByteBufferExtendedCell) cell).getRowPosition() + index);</span>
-<span class="source-line-no">089</span><span id="line-89">    }</span>
-<span class="source-line-no">090</span><span id="line-90">    return cell.getRowArray()[cell.getRowOffset() + index];</span>
-<span class="source-line-no">091</span><span id="line-91">  }</span>
-<span class="source-line-no">092</span><span id="line-92"></span>
-<span class="source-line-no">093</span><span id="line-93">  public static byte getQualifierByte(Cell cell, int index) {</span>
-<span class="source-line-no">094</span><span id="line-94">    if (cell instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">095</span><span id="line-95">      return ((ByteBufferExtendedCell) cell).getQualifierByteBuffer()</span>
-<span class="source-line-no">096</span><span id="line-96">        .get(((ByteBufferExtendedCell) cell).getQualifierPosition() + index);</span>
-<span class="source-line-no">097</span><span id="line-97">    }</span>
-<span class="source-line-no">098</span><span id="line-98">    return cell.getQualifierArray()[cell.getQualifierOffset() + index];</span>
-<span class="source-line-no">099</span><span id="line-99">  }</span>
-<span class="source-line-no">100</span><span id="line-100"></span>
-<span class="source-line-no">101</span><span id="line-101">  public static ByteBuffer getValueBufferShallowCopy(Cell cell) {</span>
-<span class="source-line-no">102</span><span id="line-102">    ByteBuffer buffer =</span>
-<span class="source-line-no">103</span><span id="line-103">      ByteBuffer.wrap(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());</span>
-<span class="source-line-no">104</span><span id="line-104">    return buffer;</span>
-<span class="source-line-no">105</span><span id="line-105">  }</span>
-<span class="source-line-no">106</span><span id="line-106"></span>
-<span class="source-line-no">107</span><span id="line-107">  /** Returns A new cell which is having the extra tags also added to it. */</span>
-<span class="source-line-no">108</span><span id="line-108">  public static ExtendedCell createCell(ExtendedCell cell, List&lt;Tag&gt; tags) {</span>
-<span class="source-line-no">109</span><span id="line-109">    return createCell(cell, TagUtil.fromList(tags));</span>
-<span class="source-line-no">110</span><span id="line-110">  }</span>
-<span class="source-line-no">111</span><span id="line-111"></span>
-<span class="source-line-no">112</span><span id="line-112">  /** Returns A new cell which is having the extra tags also added to it. */</span>
-<span class="source-line-no">113</span><span id="line-113">  public static ExtendedCell createCell(ExtendedCell cell, byte[] tags) {</span>
-<span class="source-line-no">114</span><span id="line-114">    if (cell instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">115</span><span id="line-115">      return new TagRewriteByteBufferExtendedCell((ByteBufferExtendedCell) cell, tags);</span>
-<span class="source-line-no">116</span><span id="line-116">    }</span>
-<span class="source-line-no">117</span><span id="line-117">    return new TagRewriteCell(cell, tags);</span>
-<span class="source-line-no">118</span><span id="line-118">  }</span>
-<span class="source-line-no">119</span><span id="line-119"></span>
-<span class="source-line-no">120</span><span id="line-120">  public static ExtendedCell createCell(ExtendedCell cell, byte[] value, byte[] tags) {</span>
-<span class="source-line-no">121</span><span id="line-121">    if (cell instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">122</span><span id="line-122">      return new ValueAndTagRewriteByteBufferExtendedCell((ByteBufferExtendedCell) cell, value,</span>
-<span class="source-line-no">123</span><span id="line-123">        tags);</span>
-<span class="source-line-no">124</span><span id="line-124">    }</span>
-<span class="source-line-no">125</span><span id="line-125">    return new ValueAndTagRewriteCell(cell, value, tags);</span>
-<span class="source-line-no">126</span><span id="line-126">  }</span>
-<span class="source-line-no">127</span><span id="line-127"></span>
-<span class="source-line-no">128</span><span id="line-128">  /**</span>
-<span class="source-line-no">129</span><span id="line-129">   * This can be used when a Cell has to change with addition/removal of one or more tags. This is</span>
-<span class="source-line-no">130</span><span id="line-130">   * an efficient way to do so in which only the tags bytes part need to recreated and copied. All</span>
-<span class="source-line-no">131</span><span id="line-131">   * other parts, refer to the original Cell.</span>
-<span class="source-line-no">132</span><span id="line-132">   */</span>
-<span class="source-line-no">133</span><span id="line-133">  static class TagRewriteCell implements ExtendedCell {</span>
-<span class="source-line-no">134</span><span id="line-134">    protected ExtendedCell cell;</span>
-<span class="source-line-no">135</span><span id="line-135">    protected byte[] tags;</span>
-<span class="source-line-no">136</span><span id="line-136">    private static final int HEAP_SIZE_OVERHEAD = ClassSize.OBJECT + 2 * ClassSize.REFERENCE;</span>
-<span class="source-line-no">137</span><span id="line-137"></span>
-<span class="source-line-no">138</span><span id="line-138">    /**</span>
-<span class="source-line-no">139</span><span id="line-139">     * Construct a TagRewriteCell</span>
-<span class="source-line-no">140</span><span id="line-140">     * @param cell The original Cell which it rewrites</span>
-<span class="source-line-no">141</span><span id="line-141">     * @param tags the tags bytes. The array suppose to contain the tags bytes alone.</span>
-<span class="source-line-no">142</span><span id="line-142">     */</span>
-<span class="source-line-no">143</span><span id="line-143">    public TagRewriteCell(ExtendedCell cell, byte[] tags) {</span>
-<span class="source-line-no">144</span><span id="line-144">      assert tags != null;</span>
-<span class="source-line-no">145</span><span id="line-145">      this.cell = cell;</span>
-<span class="source-line-no">146</span><span id="line-146">      this.tags = tags;</span>
-<span class="source-line-no">147</span><span id="line-147">      // tag offset will be treated as 0 and length this.tags.length</span>
-<span class="source-line-no">148</span><span id="line-148">      if (this.cell instanceof TagRewriteCell) {</span>
-<span class="source-line-no">149</span><span id="line-149">        // Cleaning the ref so that the byte[] can be GCed</span>
-<span class="source-line-no">150</span><span id="line-150">        ((TagRewriteCell) this.cell).tags = null;</span>
-<span class="source-line-no">151</span><span id="line-151">      }</span>
-<span class="source-line-no">152</span><span id="line-152">    }</span>
-<span class="source-line-no">153</span><span id="line-153"></span>
-<span class="source-line-no">154</span><span id="line-154">    @Override</span>
-<span class="source-line-no">155</span><span id="line-155">    public byte[] getRowArray() {</span>
-<span class="source-line-no">156</span><span id="line-156">      return cell.getRowArray();</span>
-<span class="source-line-no">157</span><span id="line-157">    }</span>
-<span class="source-line-no">158</span><span id="line-158"></span>
-<span class="source-line-no">159</span><span id="line-159">    @Override</span>
-<span class="source-line-no">160</span><span id="line-160">    public int getRowOffset() {</span>
-<span class="source-line-no">161</span><span id="line-161">      return cell.getRowOffset();</span>
-<span class="source-line-no">162</span><span id="line-162">    }</span>
-<span class="source-line-no">163</span><span id="line-163"></span>
-<span class="source-line-no">164</span><span id="line-164">    @Override</span>
-<span class="source-line-no">165</span><span id="line-165">    public short getRowLength() {</span>
-<span class="source-line-no">166</span><span id="line-166">      return cell.getRowLength();</span>
-<span class="source-line-no">167</span><span id="line-167">    }</span>
-<span class="source-line-no">168</span><span id="line-168"></span>
-<span class="source-line-no">169</span><span id="line-169">    @Override</span>
-<span class="source-line-no">170</span><span id="line-170">    public byte[] getFamilyArray() {</span>
-<span class="source-line-no">171</span><span id="line-171">      return cell.getFamilyArray();</span>
-<span class="source-line-no">172</span><span id="line-172">    }</span>
-<span class="source-line-no">173</span><span id="line-173"></span>
-<span class="source-line-no">174</span><span id="line-174">    @Override</span>
-<span class="source-line-no">175</span><span id="line-175">    public int getFamilyOffset() {</span>
-<span class="source-line-no">176</span><span id="line-176">      return cell.getFamilyOffset();</span>
-<span class="source-line-no">177</span><span id="line-177">    }</span>
-<span class="source-line-no">178</span><span id="line-178"></span>
-<span class="source-line-no">179</span><span id="line-179">    @Override</span>
-<span class="source-line-no">180</span><span id="line-180">    public byte getFamilyLength() {</span>
-<span class="source-line-no">181</span><span id="line-181">      return cell.getFamilyLength();</span>
-<span class="source-line-no">182</span><span id="line-182">    }</span>
-<span class="source-line-no">183</span><span id="line-183"></span>
-<span class="source-line-no">184</span><span id="line-184">    @Override</span>
-<span class="source-line-no">185</span><span id="line-185">    public byte[] getQualifierArray() {</span>
-<span class="source-line-no">186</span><span id="line-186">      return cell.getQualifierArray();</span>
-<span class="source-line-no">187</span><span id="line-187">    }</span>
-<span class="source-line-no">188</span><span id="line-188"></span>
-<span class="source-line-no">189</span><span id="line-189">    @Override</span>
-<span class="source-line-no">190</span><span id="line-190">    public int getQualifierOffset() {</span>
-<span class="source-line-no">191</span><span id="line-191">      return cell.getQualifierOffset();</span>
-<span class="source-line-no">192</span><span id="line-192">    }</span>
-<span class="source-line-no">193</span><span id="line-193"></span>
-<span class="source-line-no">194</span><span id="line-194">    @Override</span>
-<span class="source-line-no">195</span><span id="line-195">    public int getQualifierLength() {</span>
-<span class="source-line-no">196</span><span id="line-196">      return cell.getQualifierLength();</span>
-<span class="source-line-no">197</span><span id="line-197">    }</span>
-<span class="source-line-no">198</span><span id="line-198"></span>
-<span class="source-line-no">199</span><span id="line-199">    @Override</span>
-<span class="source-line-no">200</span><span id="line-200">    public long getTimestamp() {</span>
-<span class="source-line-no">201</span><span id="line-201">      return cell.getTimestamp();</span>
-<span class="source-line-no">202</span><span id="line-202">    }</span>
-<span class="source-line-no">203</span><span id="line-203"></span>
-<span class="source-line-no">204</span><span id="line-204">    @Override</span>
-<span class="source-line-no">205</span><span id="line-205">    public byte getTypeByte() {</span>
-<span class="source-line-no">206</span><span id="line-206">      return cell.getTypeByte();</span>
-<span class="source-line-no">207</span><span id="line-207">    }</span>
-<span class="source-line-no">208</span><span id="line-208"></span>
-<span class="source-line-no">209</span><span id="line-209">    @Override</span>
-<span class="source-line-no">210</span><span id="line-210">    public long getSequenceId() {</span>
-<span class="source-line-no">211</span><span id="line-211">      return cell.getSequenceId();</span>
-<span class="source-line-no">212</span><span id="line-212">    }</span>
-<span class="source-line-no">213</span><span id="line-213"></span>
-<span class="source-line-no">214</span><span id="line-214">    @Override</span>
-<span class="source-line-no">215</span><span id="line-215">    public byte[] getValueArray() {</span>
-<span class="source-line-no">216</span><span id="line-216">      return cell.getValueArray();</span>
-<span class="source-line-no">217</span><span id="line-217">    }</span>
-<span class="source-line-no">218</span><span id="line-218"></span>
-<span class="source-line-no">219</span><span id="line-219">    @Override</span>
-<span class="source-line-no">220</span><span id="line-220">    public int getValueOffset() {</span>
-<span class="source-line-no">221</span><span id="line-221">      return cell.getValueOffset();</span>
-<span class="source-line-no">222</span><span id="line-222">    }</span>
-<span class="source-line-no">223</span><span id="line-223"></span>
-<span class="source-line-no">224</span><span id="line-224">    @Override</span>
-<span class="source-line-no">225</span><span id="line-225">    public int getValueLength() {</span>
-<span class="source-line-no">226</span><span id="line-226">      return cell.getValueLength();</span>
-<span class="source-line-no">227</span><span id="line-227">    }</span>
-<span class="source-line-no">228</span><span id="line-228"></span>
-<span class="source-line-no">229</span><span id="line-229">    @Override</span>
-<span class="source-line-no">230</span><span id="line-230">    public byte[] getTagsArray() {</span>
-<span class="source-line-no">231</span><span id="line-231">      return this.tags;</span>
-<span class="source-line-no">232</span><span id="line-232">    }</span>
-<span class="source-line-no">233</span><span id="line-233"></span>
-<span class="source-line-no">234</span><span id="line-234">    @Override</span>
-<span class="source-line-no">235</span><span id="line-235">    public int getTagsOffset() {</span>
-<span class="source-line-no">236</span><span id="line-236">      return 0;</span>
-<span class="source-line-no">237</span><span id="line-237">    }</span>
-<span class="source-line-no">238</span><span id="line-238"></span>
-<span class="source-line-no">239</span><span id="line-239">    @Override</span>
-<span class="source-line-no">240</span><span id="line-240">    public int getTagsLength() {</span>
-<span class="source-line-no">241</span><span id="line-241">      if (null == this.tags) {</span>
-<span class="source-line-no">242</span><span id="line-242">        // Nulled out tags array optimization in constructor</span>
-<span class="source-line-no">243</span><span id="line-243">        return 0;</span>
-<span class="source-line-no">244</span><span id="line-244">      }</span>
-<span class="source-line-no">245</span><span id="line-245">      return this.tags.length;</span>
-<span class="source-line-no">246</span><span id="line-246">    }</span>
-<span class="source-line-no">247</span><span id="line-247"></span>
-<span class="source-line-no">248</span><span id="line-248">    @Override</span>
-<span class="source-line-no">249</span><span id="line-249">    public long heapSize() {</span>
-<span class="source-line-no">250</span><span id="line-250">      long sum = HEAP_SIZE_OVERHEAD + cell.heapSize();</span>
-<span class="source-line-no">251</span><span id="line-251">      if (this.tags != null) {</span>
-<span class="source-line-no">252</span><span id="line-252">        sum += ClassSize.sizeOf(this.tags);</span>
-<span class="source-line-no">253</span><span id="line-253">      }</span>
-<span class="source-line-no">254</span><span id="line-254">      return sum;</span>
-<span class="source-line-no">255</span><span id="line-255">    }</span>
-<span class="source-line-no">256</span><span id="line-256"></span>
-<span class="source-line-no">257</span><span id="line-257">    @Override</span>
-<span class="source-line-no">258</span><span id="line-258">    public void setTimestamp(long ts) throws IOException {</span>
-<span class="source-line-no">259</span><span id="line-259">      // The incoming cell is supposed to be ExtendedCell type.</span>
-<span class="source-line-no">260</span><span id="line-260">      PrivateCellUtil.setTimestamp(cell, ts);</span>
-<span class="source-line-no">261</span><span id="line-261">    }</span>
-<span class="source-line-no">262</span><span id="line-262"></span>
-<span class="source-line-no">263</span><span id="line-263">    @Override</span>
-<span class="source-line-no">264</span><span id="line-264">    public void setTimestamp(byte[] ts) throws IOException {</span>
-<span class="source-line-no">265</span><span id="line-265">      // The incoming cell is supposed to be ExtendedCell type.</span>
-<span class="source-line-no">266</span><span id="line-266">      PrivateCellUtil.setTimestamp(cell, ts);</span>
-<span class="source-line-no">267</span><span id="line-267">    }</span>
-<span class="source-line-no">268</span><span id="line-268"></span>
-<span class="source-line-no">269</span><span id="line-269">    @Override</span>
-<span class="source-line-no">270</span><span id="line-270">    public void setSequenceId(long seqId) throws IOException {</span>
-<span class="source-line-no">271</span><span id="line-271">      // The incoming cell is supposed to be ExtendedCell type.</span>
-<span class="source-line-no">272</span><span id="line-272">      PrivateCellUtil.setSequenceId(cell, seqId);</span>
-<span class="source-line-no">273</span><span id="line-273">    }</span>
-<span class="source-line-no">274</span><span id="line-274"></span>
-<span class="source-line-no">275</span><span id="line-275">    @Override</span>
-<span class="source-line-no">276</span><span id="line-276">    public int write(OutputStream out, boolean withTags) throws IOException {</span>
-<span class="source-line-no">277</span><span id="line-277">      int len = ((ExtendedCell) this.cell).write(out, false);</span>
-<span class="source-line-no">278</span><span id="line-278">      if (withTags &amp;&amp; this.tags != null) {</span>
-<span class="source-line-no">279</span><span id="line-279">        // Write the tagsLength 2 bytes</span>
-<span class="source-line-no">280</span><span id="line-280">        out.write((byte) (0xff &amp; (this.tags.length &gt;&gt; 8)));</span>
-<span class="source-line-no">281</span><span id="line-281">        out.write((byte) (0xff &amp; this.tags.length));</span>
-<span class="source-line-no">282</span><span id="line-282">        out.write(this.tags);</span>
-<span class="source-line-no">283</span><span id="line-283">        len += KeyValue.TAGS_LENGTH_SIZE + this.tags.length;</span>
-<span class="source-line-no">284</span><span id="line-284">      }</span>
-<span class="source-line-no">285</span><span id="line-285">      return len;</span>
-<span class="source-line-no">286</span><span id="line-286">    }</span>
-<span class="source-line-no">287</span><span id="line-287"></span>
-<span class="source-line-no">288</span><span id="line-288">    @Override</span>
-<span class="source-line-no">289</span><span id="line-289">    public int getSerializedSize(boolean withTags) {</span>
-<span class="source-line-no">290</span><span id="line-290">      int len = ((ExtendedCell) this.cell).getSerializedSize(false);</span>
-<span class="source-line-no">291</span><span id="line-291">      if (withTags &amp;&amp; this.tags != null) {</span>
-<span class="source-line-no">292</span><span id="line-292">        len += KeyValue.TAGS_LENGTH_SIZE + this.tags.length;</span>
-<span class="source-line-no">293</span><span id="line-293">      }</span>
-<span class="source-line-no">294</span><span id="line-294">      return len;</span>
-<span class="source-line-no">295</span><span id="line-295">    }</span>
-<span class="source-line-no">296</span><span id="line-296"></span>
-<span class="source-line-no">297</span><span id="line-297">    @Override</span>
-<span class="source-line-no">298</span><span id="line-298">    public void write(ByteBuffer buf, int offset) {</span>
-<span class="source-line-no">299</span><span id="line-299">      offset = KeyValueUtil.appendTo(this.cell, buf, offset, false);</span>
-<span class="source-line-no">300</span><span id="line-300">      int tagsLen = this.tags == null ? 0 : this.tags.length;</span>
-<span class="source-line-no">301</span><span id="line-301">      if (tagsLen &gt; 0) {</span>
-<span class="source-line-no">302</span><span id="line-302">        offset = ByteBufferUtils.putAsShort(buf, offset, tagsLen);</span>
-<span class="source-line-no">303</span><span id="line-303">        ByteBufferUtils.copyFromArrayToBuffer(buf, offset, this.tags, 0, tagsLen);</span>
-<span class="source-line-no">304</span><span id="line-304">      }</span>
-<span class="source-line-no">305</span><span id="line-305">    }</span>
-<span class="source-line-no">306</span><span id="line-306"></span>
-<span class="source-line-no">307</span><span id="line-307">    @Override</span>
-<span class="source-line-no">308</span><span id="line-308">    public ExtendedCell deepClone() {</span>
-<span class="source-line-no">309</span><span id="line-309">      ExtendedCell clonedBaseCell = this.cell.deepClone();</span>
-<span class="source-line-no">310</span><span id="line-310">      return new TagRewriteCell(clonedBaseCell, this.tags);</span>
-<span class="source-line-no">311</span><span id="line-311">    }</span>
-<span class="source-line-no">312</span><span id="line-312">  }</span>
-<span class="source-line-no">313</span><span id="line-313"></span>
-<span class="source-line-no">314</span><span id="line-314">  static class TagRewriteByteBufferExtendedCell extends ByteBufferExtendedCell {</span>
-<span class="source-line-no">315</span><span id="line-315"></span>
-<span class="source-line-no">316</span><span id="line-316">    protected ByteBufferExtendedCell cell;</span>
-<span class="source-line-no">317</span><span id="line-317">    protected byte[] tags;</span>
-<span class="source-line-no">318</span><span id="line-318">    private static final int HEAP_SIZE_OVERHEAD = ClassSize.OBJECT + 2 * ClassSize.REFERENCE;</span>
-<span class="source-line-no">319</span><span id="line-319"></span>
-<span class="source-line-no">320</span><span id="line-320">    /**</span>
-<span class="source-line-no">321</span><span id="line-321">     * @param cell The original ByteBufferExtendedCell which it rewrites</span>
-<span class="source-line-no">322</span><span id="line-322">     * @param tags the tags bytes. The array suppose to contain the tags bytes alone.</span>
-<span class="source-line-no">323</span><span id="line-323">     */</span>
-<span class="source-line-no">324</span><span id="line-324">    public TagRewriteByteBufferExtendedCell(ByteBufferExtendedCell cell, byte[] tags) {</span>
-<span class="source-line-no">325</span><span id="line-325">      assert tags != null;</span>
-<span class="source-line-no">326</span><span id="line-326">      this.cell = cell;</span>
-<span class="source-line-no">327</span><span id="line-327">      this.tags = tags;</span>
-<span class="source-line-no">328</span><span id="line-328">      // tag offset will be treated as 0 and length this.tags.length</span>
-<span class="source-line-no">329</span><span id="line-329">      if (this.cell instanceof TagRewriteByteBufferExtendedCell) {</span>
-<span class="source-line-no">330</span><span id="line-330">        // Cleaning the ref so that the byte[] can be GCed</span>
-<span class="source-line-no">331</span><span id="line-331">        ((TagRewriteByteBufferExtendedCell) this.cell).tags = null;</span>
-<span class="source-line-no">332</span><span id="line-332">      }</span>
-<span class="source-line-no">333</span><span id="line-333">    }</span>
-<span class="source-line-no">334</span><span id="line-334"></span>
-<span class="source-line-no">335</span><span id="line-335">    @Override</span>
-<span class="source-line-no">336</span><span id="line-336">    public byte[] getRowArray() {</span>
-<span class="source-line-no">337</span><span id="line-337">      return this.cell.getRowArray();</span>
-<span class="source-line-no">338</span><span id="line-338">    }</span>
-<span class="source-line-no">339</span><span id="line-339"></span>
-<span class="source-line-no">340</span><span id="line-340">    @Override</span>
-<span class="source-line-no">341</span><span id="line-341">    public int getRowOffset() {</span>
-<span class="source-line-no">342</span><span id="line-342">      return this.cell.getRowOffset();</span>
-<span class="source-line-no">343</span><span id="line-343">    }</span>
-<span class="source-line-no">344</span><span id="line-344"></span>
-<span class="source-line-no">345</span><span id="line-345">    @Override</span>
-<span class="source-line-no">346</span><span id="line-346">    public short getRowLength() {</span>
-<span class="source-line-no">347</span><span id="line-347">      return this.cell.getRowLength();</span>
-<span class="source-line-no">348</span><span id="line-348">    }</span>
-<span class="source-line-no">349</span><span id="line-349"></span>
-<span class="source-line-no">350</span><span id="line-350">    @Override</span>
-<span class="source-line-no">351</span><span id="line-351">    public byte[] getFamilyArray() {</span>
-<span class="source-line-no">352</span><span id="line-352">      return this.cell.getFamilyArray();</span>
-<span class="source-line-no">353</span><span id="line-353">    }</span>
-<span class="source-line-no">354</span><span id="line-354"></span>
-<span class="source-line-no">355</span><span id="line-355">    @Override</span>
-<span class="source-line-no">356</span><span id="line-356">    public int getFamilyOffset() {</span>
-<span class="source-line-no">357</span><span id="line-357">      return this.cell.getFamilyOffset();</span>
-<span class="source-line-no">358</span><span id="line-358">    }</span>
-<span class="source-line-no">359</span><span id="line-359"></span>
-<span class="source-line-no">360</span><span id="line-360">    @Override</span>
-<span class="source-line-no">361</span><span id="line-361">    public byte getFamilyLength() {</span>
-<span class="source-line-no">362</span><span id="line-362">      return this.cell.getFamilyLength();</span>
-<span class="source-line-no">363</span><span id="line-363">    }</span>
-<span class="source-line-no">364</span><span id="line-364"></span>
-<span class="source-line-no">365</span><span id="line-365">    @Override</span>
-<span class="source-line-no">366</span><span id="line-366">    public byte[] getQualifierArray() {</span>
-<span class="source-line-no">367</span><span id="line-367">      return this.cell.getQualifierArray();</span>
-<span class="source-line-no">368</span><span id="line-368">    }</span>
-<span class="source-line-no">369</span><span id="line-369"></span>
-<span class="source-line-no">370</span><span id="line-370">    @Override</span>
-<span class="source-line-no">371</span><span id="line-371">    public int getQualifierOffset() {</span>
-<span class="source-line-no">372</span><span id="line-372">      return this.cell.getQualifierOffset();</span>
-<span class="source-line-no">373</span><span id="line-373">    }</span>
-<span class="source-line-no">374</span><span id="line-374"></span>
-<span class="source-line-no">375</span><span id="line-375">    @Override</span>
-<span class="source-line-no">376</span><span id="line-376">    public int getQualifierLength() {</span>
-<span class="source-line-no">377</span><span id="line-377">      return this.cell.getQualifierLength();</span>
-<span class="source-line-no">378</span><span id="line-378">    }</span>
-<span class="source-line-no">379</span><span id="line-379"></span>
-<span class="source-line-no">380</span><span id="line-380">    @Override</span>
-<span class="source-line-no">381</span><span id="line-381">    public long getTimestamp() {</span>
-<span class="source-line-no">382</span><span id="line-382">      return this.cell.getTimestamp();</span>
-<span class="source-line-no">383</span><span id="line-383">    }</span>
-<span class="source-line-no">384</span><span id="line-384"></span>
-<span class="source-line-no">385</span><span id="line-385">    @Override</span>
-<span class="source-line-no">386</span><span id="line-386">    public byte getTypeByte() {</span>
-<span class="source-line-no">387</span><span id="line-387">      return this.cell.getTypeByte();</span>
-<span class="source-line-no">388</span><span id="line-388">    }</span>
-<span class="source-line-no">389</span><span id="line-389"></span>
-<span class="source-line-no">390</span><span id="line-390">    @Override</span>
-<span class="source-line-no">391</span><span id="line-391">    public long getSequenceId() {</span>
-<span class="source-line-no">392</span><span id="line-392">      return this.cell.getSequenceId();</span>
-<span class="source-line-no">393</span><span id="line-393">    }</span>
-<span class="source-line-no">394</span><span id="line-394"></span>
-<span class="source-line-no">395</span><span id="line-395">    @Override</span>
-<span class="source-line-no">396</span><span id="line-396">    public byte[] getValueArray() {</span>
-<span class="source-line-no">397</span><span id="line-397">      return this.cell.getValueArray();</span>
-<span class="source-line-no">398</span><span id="line-398">    }</span>
-<span class="source-line-no">399</span><span id="line-399"></span>
-<span class="source-line-no">400</span><span id="line-400">    @Override</span>
-<span class="source-line-no">401</span><span id="line-401">    public int getValueOffset() {</span>
-<span class="source-line-no">402</span><span id="line-402">      return this.cell.getValueOffset();</span>
-<span class="source-line-no">403</span><span id="line-403">    }</span>
-<span class="source-line-no">404</span><span id="line-404"></span>
-<span class="source-line-no">405</span><span id="line-405">    @Override</span>
-<span class="source-line-no">406</span><span id="line-406">    public int getValueLength() {</span>
-<span class="source-line-no">407</span><span id="line-407">      return this.cell.getValueLength();</span>
-<span class="source-line-no">408</span><span id="line-408">    }</span>
-<span class="source-line-no">409</span><span id="line-409"></span>
-<span class="source-line-no">410</span><span id="line-410">    @Override</span>
-<span class="source-line-no">411</span><span id="line-411">    public byte[] getTagsArray() {</span>
-<span class="source-line-no">412</span><span id="line-412">      return this.tags;</span>
-<span class="source-line-no">413</span><span id="line-413">    }</span>
-<span class="source-line-no">414</span><span id="line-414"></span>
-<span class="source-line-no">415</span><span id="line-415">    @Override</span>
-<span class="source-line-no">416</span><span id="line-416">    public int getTagsOffset() {</span>
-<span class="source-line-no">417</span><span id="line-417">      return 0;</span>
-<span class="source-line-no">418</span><span id="line-418">    }</span>
-<span class="source-line-no">419</span><span id="line-419"></span>
-<span class="source-line-no">420</span><span id="line-420">    @Override</span>
-<span class="source-line-no">421</span><span id="line-421">    public int getTagsLength() {</span>
-<span class="source-line-no">422</span><span id="line-422">      if (null == this.tags) {</span>
-<span class="source-line-no">423</span><span id="line-423">        // Nulled out tags array optimization in constructor</span>
-<span class="source-line-no">424</span><span id="line-424">        return 0;</span>
-<span class="source-line-no">425</span><span id="line-425">      }</span>
-<span class="source-line-no">426</span><span id="line-426">      return this.tags.length;</span>
-<span class="source-line-no">427</span><span id="line-427">    }</span>
-<span class="source-line-no">428</span><span id="line-428"></span>
-<span class="source-line-no">429</span><span id="line-429">    @Override</span>
-<span class="source-line-no">430</span><span id="line-430">    public void setSequenceId(long seqId) throws IOException {</span>
-<span class="source-line-no">431</span><span id="line-431">      PrivateCellUtil.setSequenceId(this.cell, seqId);</span>
-<span class="source-line-no">432</span><span id="line-432">    }</span>
-<span class="source-line-no">433</span><span id="line-433"></span>
-<span class="source-line-no">434</span><span id="line-434">    @Override</span>
-<span class="source-line-no">435</span><span id="line-435">    public void setTimestamp(long ts) throws IOException {</span>
-<span class="source-line-no">436</span><span id="line-436">      PrivateCellUtil.setTimestamp(this.cell, ts);</span>
-<span class="source-line-no">437</span><span id="line-437">    }</span>
-<span class="source-line-no">438</span><span id="line-438"></span>
-<span class="source-line-no">439</span><span id="line-439">    @Override</span>
-<span class="source-line-no">440</span><span id="line-440">    public void setTimestamp(byte[] ts) throws IOException {</span>
-<span class="source-line-no">441</span><span id="line-441">      PrivateCellUtil.setTimestamp(this.cell, ts);</span>
-<span class="source-line-no">442</span><span id="line-442">    }</span>
-<span class="source-line-no">443</span><span id="line-443"></span>
-<span class="source-line-no">444</span><span id="line-444">    @Override</span>
-<span class="source-line-no">445</span><span id="line-445">    public long heapSize() {</span>
-<span class="source-line-no">446</span><span id="line-446">      long sum = HEAP_SIZE_OVERHEAD + cell.heapSize();</span>
-<span class="source-line-no">447</span><span id="line-447">      // this.tags is on heap byte[]</span>
-<span class="source-line-no">448</span><span id="line-448">      if (this.tags != null) {</span>
-<span class="source-line-no">449</span><span id="line-449">        sum += ClassSize.sizeOf(this.tags);</span>
-<span class="source-line-no">450</span><span id="line-450">      }</span>
-<span class="source-line-no">451</span><span id="line-451">      return sum;</span>
-<span class="source-line-no">452</span><span id="line-452">    }</span>
-<span class="source-line-no">453</span><span id="line-453"></span>
-<span class="source-line-no">454</span><span id="line-454">    @Override</span>
-<span class="source-line-no">455</span><span id="line-455">    public int write(OutputStream out, boolean withTags) throws IOException {</span>
-<span class="source-line-no">456</span><span id="line-456">      int len = ((ExtendedCell) this.cell).write(out, false);</span>
-<span class="source-line-no">457</span><span id="line-457">      if (withTags &amp;&amp; this.tags != null) {</span>
-<span class="source-line-no">458</span><span id="line-458">        // Write the tagsLength 2 bytes</span>
-<span class="source-line-no">459</span><span id="line-459">        out.write((byte) (0xff &amp; (this.tags.length &gt;&gt; 8)));</span>
-<span class="source-line-no">460</span><span id="line-460">        out.write((byte) (0xff &amp; this.tags.length));</span>
-<span class="source-line-no">461</span><span id="line-461">        out.write(this.tags);</span>
-<span class="source-line-no">462</span><span id="line-462">        len += KeyValue.TAGS_LENGTH_SIZE + this.tags.length;</span>
-<span class="source-line-no">463</span><span id="line-463">      }</span>
-<span class="source-line-no">464</span><span id="line-464">      return len;</span>
-<span class="source-line-no">465</span><span id="line-465">    }</span>
-<span class="source-line-no">466</span><span id="line-466"></span>
-<span class="source-line-no">467</span><span id="line-467">    @Override</span>
-<span class="source-line-no">468</span><span id="line-468">    public int getSerializedSize(boolean withTags) {</span>
-<span class="source-line-no">469</span><span id="line-469">      int len = ((ExtendedCell) this.cell).getSerializedSize(false);</span>
-<span class="source-line-no">470</span><span id="line-470">      if (withTags &amp;&amp; this.tags != null) {</span>
-<span class="source-line-no">471</span><span id="line-471">        len += KeyValue.TAGS_LENGTH_SIZE + this.tags.length;</span>
-<span class="source-line-no">472</span><span id="line-472">      }</span>
-<span class="source-line-no">473</span><span id="line-473">      return len;</span>
-<span class="source-line-no">474</span><span id="line-474">    }</span>
-<span class="source-line-no">475</span><span id="line-475"></span>
-<span class="source-line-no">476</span><span id="line-476">    @Override</span>
-<span class="source-line-no">477</span><span id="line-477">    public void write(ByteBuffer buf, int offset) {</span>
-<span class="source-line-no">478</span><span id="line-478">      offset = KeyValueUtil.appendTo(this.cell, buf, offset, false);</span>
-<span class="source-line-no">479</span><span id="line-479">      int tagsLen = this.tags == null ? 0 : this.tags.length;</span>
-<span class="source-line-no">480</span><span id="line-480">      if (tagsLen &gt; 0) {</span>
-<span class="source-line-no">481</span><span id="line-481">        offset = ByteBufferUtils.putAsShort(buf, offset, tagsLen);</span>
-<span class="source-line-no">482</span><span id="line-482">        ByteBufferUtils.copyFromArrayToBuffer(buf, offset, this.tags, 0, tagsLen);</span>
-<span class="source-line-no">483</span><span id="line-483">      }</span>
-<span class="source-line-no">484</span><span id="line-484">    }</span>
-<span class="source-line-no">485</span><span id="line-485"></span>
-<span class="source-line-no">486</span><span id="line-486">    @Override</span>
-<span class="source-line-no">487</span><span id="line-487">    public ExtendedCell deepClone() {</span>
-<span class="source-line-no">488</span><span id="line-488">      ExtendedCell clonedBaseCell = this.cell.deepClone();</span>
-<span class="source-line-no">489</span><span id="line-489">      if (clonedBaseCell instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">490</span><span id="line-490">        return new TagRewriteByteBufferExtendedCell((ByteBufferExtendedCell) clonedBaseCell,</span>
-<span class="source-line-no">491</span><span id="line-491">          this.tags);</span>
-<span class="source-line-no">492</span><span id="line-492">      }</span>
-<span class="source-line-no">493</span><span id="line-493">      return new TagRewriteCell(clonedBaseCell, this.tags);</span>
-<span class="source-line-no">494</span><span id="line-494">    }</span>
-<span class="source-line-no">495</span><span id="line-495"></span>
-<span class="source-line-no">496</span><span id="line-496">    @Override</span>
-<span class="source-line-no">497</span><span id="line-497">    public ByteBuffer getRowByteBuffer() {</span>
-<span class="source-line-no">498</span><span id="line-498">      return this.cell.getRowByteBuffer();</span>
-<span class="source-line-no">499</span><span id="line-499">    }</span>
-<span class="source-line-no">500</span><span id="line-500"></span>
-<span class="source-line-no">501</span><span id="line-501">    @Override</span>
-<span class="source-line-no">502</span><span id="line-502">    public int getRowPosition() {</span>
-<span class="source-line-no">503</span><span id="line-503">      return this.cell.getRowPosition();</span>
-<span class="source-line-no">504</span><span id="line-504">    }</span>
-<span class="source-line-no">505</span><span id="line-505"></span>
-<span class="source-line-no">506</span><span id="line-506">    @Override</span>
-<span class="source-line-no">507</span><span id="line-507">    public ByteBuffer getFamilyByteBuffer() {</span>
-<span class="source-line-no">508</span><span id="line-508">      return this.cell.getFamilyByteBuffer();</span>
-<span class="source-line-no">509</span><span id="line-509">    }</span>
-<span class="source-line-no">510</span><span id="line-510"></span>
-<span class="source-line-no">511</span><span id="line-511">    @Override</span>
-<span class="source-line-no">512</span><span id="line-512">    public int getFamilyPosition() {</span>
-<span class="source-line-no">513</span><span id="line-513">      return this.cell.getFamilyPosition();</span>
-<span class="source-line-no">514</span><span id="line-514">    }</span>
-<span class="source-line-no">515</span><span id="line-515"></span>
-<span class="source-line-no">516</span><span id="line-516">    @Override</span>
-<span class="source-line-no">517</span><span id="line-517">    public ByteBuffer getQualifierByteBuffer() {</span>
-<span class="source-line-no">518</span><span id="line-518">      return this.cell.getQualifierByteBuffer();</span>
-<span class="source-line-no">519</span><span id="line-519">    }</span>
-<span class="source-line-no">520</span><span id="line-520"></span>
-<span class="source-line-no">521</span><span id="line-521">    @Override</span>
-<span class="source-line-no">522</span><span id="line-522">    public int getQualifierPosition() {</span>
-<span class="source-line-no">523</span><span id="line-523">      return this.cell.getQualifierPosition();</span>
-<span class="source-line-no">524</span><span id="line-524">    }</span>
-<span class="source-line-no">525</span><span id="line-525"></span>
-<span class="source-line-no">526</span><span id="line-526">    @Override</span>
-<span class="source-line-no">527</span><span id="line-527">    public ByteBuffer getValueByteBuffer() {</span>
-<span class="source-line-no">528</span><span id="line-528">      return this.cell.getValueByteBuffer();</span>
-<span class="source-line-no">529</span><span id="line-529">    }</span>
-<span class="source-line-no">530</span><span id="line-530"></span>
-<span class="source-line-no">531</span><span id="line-531">    @Override</span>
-<span class="source-line-no">532</span><span id="line-532">    public int getValuePosition() {</span>
-<span class="source-line-no">533</span><span id="line-533">      return this.cell.getValuePosition();</span>
-<span class="source-line-no">534</span><span id="line-534">    }</span>
-<span class="source-line-no">535</span><span id="line-535"></span>
-<span class="source-line-no">536</span><span id="line-536">    @Override</span>
-<span class="source-line-no">537</span><span id="line-537">    public ByteBuffer getTagsByteBuffer() {</span>
-<span class="source-line-no">538</span><span id="line-538">      return this.tags == null ? HConstants.EMPTY_BYTE_BUFFER : ByteBuffer.wrap(this.tags);</span>
-<span class="source-line-no">539</span><span id="line-539">    }</span>
-<span class="source-line-no">540</span><span id="line-540"></span>
-<span class="source-line-no">541</span><span id="line-541">    @Override</span>
-<span class="source-line-no">542</span><span id="line-542">    public int getTagsPosition() {</span>
-<span class="source-line-no">543</span><span id="line-543">      return 0;</span>
-<span class="source-line-no">544</span><span id="line-544">    }</span>
-<span class="source-line-no">545</span><span id="line-545">  }</span>
-<span class="source-line-no">546</span><span id="line-546"></span>
-<span class="source-line-no">547</span><span id="line-547">  static class ValueAndTagRewriteCell extends TagRewriteCell {</span>
-<span class="source-line-no">548</span><span id="line-548"></span>
-<span class="source-line-no">549</span><span id="line-549">    protected byte[] value;</span>
-<span class="source-line-no">550</span><span id="line-550"></span>
-<span class="source-line-no">551</span><span id="line-551">    public ValueAndTagRewriteCell(ExtendedCell cell, byte[] value, byte[] tags) {</span>
-<span class="source-line-no">552</span><span id="line-552">      super(cell, tags);</span>
-<span class="source-line-no">553</span><span id="line-553">      this.value = value;</span>
-<span class="source-line-no">554</span><span id="line-554">    }</span>
-<span class="source-line-no">555</span><span id="line-555"></span>
-<span class="source-line-no">556</span><span id="line-556">    @Override</span>
-<span class="source-line-no">557</span><span id="line-557">    public byte[] getValueArray() {</span>
-<span class="source-line-no">558</span><span id="line-558">      return this.value;</span>
-<span class="source-line-no">559</span><span id="line-559">    }</span>
-<span class="source-line-no">560</span><span id="line-560"></span>
-<span class="source-line-no">561</span><span id="line-561">    @Override</span>
-<span class="source-line-no">562</span><span id="line-562">    public int getValueOffset() {</span>
-<span class="source-line-no">563</span><span id="line-563">      return 0;</span>
-<span class="source-line-no">564</span><span id="line-564">    }</span>
-<span class="source-line-no">565</span><span id="line-565"></span>
-<span class="source-line-no">566</span><span id="line-566">    @Override</span>
-<span class="source-line-no">567</span><span id="line-567">    public int getValueLength() {</span>
-<span class="source-line-no">568</span><span id="line-568">      return this.value == null ? 0 : this.value.length;</span>
-<span class="source-line-no">569</span><span id="line-569">    }</span>
-<span class="source-line-no">570</span><span id="line-570"></span>
-<span class="source-line-no">571</span><span id="line-571">    @Override</span>
-<span class="source-line-no">572</span><span id="line-572">    public long heapSize() {</span>
-<span class="source-line-no">573</span><span id="line-573">      long sum = ClassSize.REFERENCE + super.heapSize();</span>
-<span class="source-line-no">574</span><span id="line-574">      if (this.value != null) {</span>
-<span class="source-line-no">575</span><span id="line-575">        sum += ClassSize.sizeOf(this.value);</span>
-<span class="source-line-no">576</span><span id="line-576">      }</span>
-<span class="source-line-no">577</span><span id="line-577">      return sum;</span>
-<span class="source-line-no">578</span><span id="line-578">    }</span>
-<span class="source-line-no">579</span><span id="line-579"></span>
-<span class="source-line-no">580</span><span id="line-580">    @Override</span>
-<span class="source-line-no">581</span><span id="line-581">    public int write(OutputStream out, boolean withTags) throws IOException {</span>
-<span class="source-line-no">582</span><span id="line-582">      return write(out, withTags, this.cell, this.value, this.tags);</span>
-<span class="source-line-no">583</span><span id="line-583">    }</span>
-<span class="source-line-no">584</span><span id="line-584"></span>
-<span class="source-line-no">585</span><span id="line-585">    /**</span>
-<span class="source-line-no">586</span><span id="line-586">     * Made into a static method so as to reuse the logic within</span>
-<span class="source-line-no">587</span><span id="line-587">     * ValueAndTagRewriteByteBufferExtendedCell</span>
-<span class="source-line-no">588</span><span id="line-588">     */</span>
-<span class="source-line-no">589</span><span id="line-589">    static int write(OutputStream out, boolean withTags, ExtendedCell cell, byte[] value,</span>
-<span class="source-line-no">590</span><span id="line-590">      byte[] tags) throws IOException {</span>
-<span class="source-line-no">591</span><span id="line-591">      int valLen = value == null ? 0 : value.length;</span>
-<span class="source-line-no">592</span><span id="line-592">      ByteBufferUtils.putInt(out, KeyValueUtil.keyLength(cell));// Key length</span>
-<span class="source-line-no">593</span><span id="line-593">      ByteBufferUtils.putInt(out, valLen);// Value length</span>
-<span class="source-line-no">594</span><span id="line-594">      int len = 2 * Bytes.SIZEOF_INT;</span>
-<span class="source-line-no">595</span><span id="line-595">      len += writeFlatKey(cell, out);// Key</span>
-<span class="source-line-no">596</span><span id="line-596">      if (valLen &gt; 0) {</span>
-<span class="source-line-no">597</span><span id="line-597">        out.write(value);// Value</span>
-<span class="source-line-no">598</span><span id="line-598">      }</span>
-<span class="source-line-no">599</span><span id="line-599">      len += valLen;</span>
-<span class="source-line-no">600</span><span id="line-600">      if (withTags &amp;&amp; tags != null) {</span>
-<span class="source-line-no">601</span><span id="line-601">        // Write the tagsLength 2 bytes</span>
-<span class="source-line-no">602</span><span id="line-602">        out.write((byte) (0xff &amp; (tags.length &gt;&gt; 8)));</span>
-<span class="source-line-no">603</span><span id="line-603">        out.write((byte) (0xff &amp; tags.length));</span>
-<span class="source-line-no">604</span><span id="line-604">        out.write(tags);</span>
-<span class="source-line-no">605</span><span id="line-605">        len += KeyValue.TAGS_LENGTH_SIZE + tags.length;</span>
-<span class="source-line-no">606</span><span id="line-606">      }</span>
-<span class="source-line-no">607</span><span id="line-607">      return len;</span>
-<span class="source-line-no">608</span><span id="line-608">    }</span>
-<span class="source-line-no">609</span><span id="line-609"></span>
-<span class="source-line-no">610</span><span id="line-610">    @Override</span>
-<span class="source-line-no">611</span><span id="line-611">    public int getSerializedSize(boolean withTags) {</span>
-<span class="source-line-no">612</span><span id="line-612">      return super.getSerializedSize(withTags) - this.cell.getValueLength() + this.value.length;</span>
-<span class="source-line-no">613</span><span id="line-613">    }</span>
-<span class="source-line-no">614</span><span id="line-614"></span>
-<span class="source-line-no">615</span><span id="line-615">    @Override</span>
-<span class="source-line-no">616</span><span id="line-616">    public void write(ByteBuffer buf, int offset) {</span>
-<span class="source-line-no">617</span><span id="line-617">      write(buf, offset, this.cell, this.value, this.tags);</span>
-<span class="source-line-no">618</span><span id="line-618">    }</span>
-<span class="source-line-no">619</span><span id="line-619"></span>
-<span class="source-line-no">620</span><span id="line-620">    /**</span>
-<span class="source-line-no">621</span><span id="line-621">     * Made into a static method so as to reuse the logic within</span>
-<span class="source-line-no">622</span><span id="line-622">     * ValueAndTagRewriteByteBufferExtendedCell</span>
-<span class="source-line-no">623</span><span id="line-623">     */</span>
-<span class="source-line-no">624</span><span id="line-624">    static void write(ByteBuffer buf, int offset, ExtendedCell cell, byte[] value, byte[] tags) {</span>
-<span class="source-line-no">625</span><span id="line-625">      offset = ByteBufferUtils.putInt(buf, offset, KeyValueUtil.keyLength(cell));// Key length</span>
-<span class="source-line-no">626</span><span id="line-626">      offset = ByteBufferUtils.putInt(buf, offset, value.length);// Value length</span>
-<span class="source-line-no">627</span><span id="line-627">      offset = KeyValueUtil.appendKeyTo(cell, buf, offset);</span>
-<span class="source-line-no">628</span><span id="line-628">      ByteBufferUtils.copyFromArrayToBuffer(buf, offset, value, 0, value.length);</span>
-<span class="source-line-no">629</span><span id="line-629">      offset += value.length;</span>
-<span class="source-line-no">630</span><span id="line-630">      int tagsLen = tags == null ? 0 : tags.length;</span>
-<span class="source-line-no">631</span><span id="line-631">      if (tagsLen &gt; 0) {</span>
-<span class="source-line-no">632</span><span id="line-632">        offset = ByteBufferUtils.putAsShort(buf, offset, tagsLen);</span>
-<span class="source-line-no">633</span><span id="line-633">        ByteBufferUtils.copyFromArrayToBuffer(buf, offset, tags, 0, tagsLen);</span>
-<span class="source-line-no">634</span><span id="line-634">      }</span>
-<span class="source-line-no">635</span><span id="line-635">    }</span>
-<span class="source-line-no">636</span><span id="line-636"></span>
-<span class="source-line-no">637</span><span id="line-637">    @Override</span>
-<span class="source-line-no">638</span><span id="line-638">    public ExtendedCell deepClone() {</span>
-<span class="source-line-no">639</span><span id="line-639">      ExtendedCell clonedBaseCell = this.cell.deepClone();</span>
-<span class="source-line-no">640</span><span id="line-640">      return new ValueAndTagRewriteCell(clonedBaseCell, this.value, this.tags);</span>
-<span class="source-line-no">641</span><span id="line-641">    }</span>
-<span class="source-line-no">642</span><span id="line-642">  }</span>
-<span class="source-line-no">643</span><span id="line-643"></span>
-<span class="source-line-no">644</span><span id="line-644">  static class ValueAndTagRewriteByteBufferExtendedCell extends TagRewriteByteBufferExtendedCell {</span>
-<span class="source-line-no">645</span><span id="line-645"></span>
-<span class="source-line-no">646</span><span id="line-646">    protected byte[] value;</span>
-<span class="source-line-no">647</span><span id="line-647"></span>
-<span class="source-line-no">648</span><span id="line-648">    public ValueAndTagRewriteByteBufferExtendedCell(ByteBufferExtendedCell cell, byte[] value,</span>
-<span class="source-line-no">649</span><span id="line-649">      byte[] tags) {</span>
-<span class="source-line-no">650</span><span id="line-650">      super(cell, tags);</span>
-<span class="source-line-no">651</span><span id="line-651">      this.value = value;</span>
-<span class="source-line-no">652</span><span id="line-652">    }</span>
-<span class="source-line-no">653</span><span id="line-653"></span>
-<span class="source-line-no">654</span><span id="line-654">    @Override</span>
-<span class="source-line-no">655</span><span id="line-655">    public byte[] getValueArray() {</span>
-<span class="source-line-no">656</span><span id="line-656">      return this.value;</span>
-<span class="source-line-no">657</span><span id="line-657">    }</span>
-<span class="source-line-no">658</span><span id="line-658"></span>
-<span class="source-line-no">659</span><span id="line-659">    @Override</span>
-<span class="source-line-no">660</span><span id="line-660">    public int getValueOffset() {</span>
-<span class="source-line-no">661</span><span id="line-661">      return 0;</span>
-<span class="source-line-no">662</span><span id="line-662">    }</span>
-<span class="source-line-no">663</span><span id="line-663"></span>
-<span class="source-line-no">664</span><span id="line-664">    @Override</span>
-<span class="source-line-no">665</span><span id="line-665">    public int getValueLength() {</span>
-<span class="source-line-no">666</span><span id="line-666">      return this.value == null ? 0 : this.value.length;</span>
-<span class="source-line-no">667</span><span id="line-667">    }</span>
-<span class="source-line-no">668</span><span id="line-668"></span>
-<span class="source-line-no">669</span><span id="line-669">    @Override</span>
-<span class="source-line-no">670</span><span id="line-670">    public ByteBuffer getValueByteBuffer() {</span>
-<span class="source-line-no">671</span><span id="line-671">      return ByteBuffer.wrap(this.value);</span>
-<span class="source-line-no">672</span><span id="line-672">    }</span>
-<span class="source-line-no">673</span><span id="line-673"></span>
-<span class="source-line-no">674</span><span id="line-674">    @Override</span>
-<span class="source-line-no">675</span><span id="line-675">    public int getValuePosition() {</span>
-<span class="source-line-no">676</span><span id="line-676">      return 0;</span>
-<span class="source-line-no">677</span><span id="line-677">    }</span>
-<span class="source-line-no">678</span><span id="line-678"></span>
-<span class="source-line-no">679</span><span id="line-679">    @Override</span>
-<span class="source-line-no">680</span><span id="line-680">    public long heapSize() {</span>
-<span class="source-line-no">681</span><span id="line-681">      long sum = ClassSize.REFERENCE + super.heapSize();</span>
-<span class="source-line-no">682</span><span id="line-682">      if (this.value != null) {</span>
-<span class="source-line-no">683</span><span id="line-683">        sum += ClassSize.sizeOf(this.value);</span>
-<span class="source-line-no">684</span><span id="line-684">      }</span>
-<span class="source-line-no">685</span><span id="line-685">      return sum;</span>
-<span class="source-line-no">686</span><span id="line-686">    }</span>
-<span class="source-line-no">687</span><span id="line-687"></span>
-<span class="source-line-no">688</span><span id="line-688">    @Override</span>
-<span class="source-line-no">689</span><span id="line-689">    public int write(OutputStream out, boolean withTags) throws IOException {</span>
-<span class="source-line-no">690</span><span id="line-690">      return ValueAndTagRewriteCell.write(out, withTags, this.cell, this.value, this.tags);</span>
-<span class="source-line-no">691</span><span id="line-691">    }</span>
-<span class="source-line-no">692</span><span id="line-692"></span>
-<span class="source-line-no">693</span><span id="line-693">    @Override</span>
-<span class="source-line-no">694</span><span id="line-694">    public int getSerializedSize(boolean withTags) {</span>
-<span class="source-line-no">695</span><span id="line-695">      return super.getSerializedSize(withTags) - this.cell.getValueLength() + this.value.length;</span>
-<span class="source-line-no">696</span><span id="line-696">    }</span>
-<span class="source-line-no">697</span><span id="line-697"></span>
-<span class="source-line-no">698</span><span id="line-698">    @Override</span>
-<span class="source-line-no">699</span><span id="line-699">    public void write(ByteBuffer buf, int offset) {</span>
-<span class="source-line-no">700</span><span id="line-700">      ValueAndTagRewriteCell.write(buf, offset, this.cell, this.value, this.tags);</span>
-<span class="source-line-no">701</span><span id="line-701">    }</span>
-<span class="source-line-no">702</span><span id="line-702"></span>
-<span class="source-line-no">703</span><span id="line-703">    @Override</span>
-<span class="source-line-no">704</span><span id="line-704">    public ExtendedCell deepClone() {</span>
-<span class="source-line-no">705</span><span id="line-705">      ExtendedCell clonedBaseCell = this.cell.deepClone();</span>
-<span class="source-line-no">706</span><span id="line-706">      if (clonedBaseCell instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">707</span><span id="line-707">        return new ValueAndTagRewriteByteBufferExtendedCell((ByteBufferExtendedCell) clonedBaseCell,</span>
-<span class="source-line-no">708</span><span id="line-708">          this.value, this.tags);</span>
-<span class="source-line-no">709</span><span id="line-709">      }</span>
-<span class="source-line-no">710</span><span id="line-710">      return new ValueAndTagRewriteCell(clonedBaseCell, this.value, this.tags);</span>
-<span class="source-line-no">711</span><span id="line-711">    }</span>
-<span class="source-line-no">712</span><span id="line-712">  }</span>
-<span class="source-line-no">713</span><span id="line-713"></span>
-<span class="source-line-no">714</span><span id="line-714">  public static boolean matchingRows(final Cell left, final byte[] buf, final int offset,</span>
-<span class="source-line-no">715</span><span id="line-715">    final int length) {</span>
-<span class="source-line-no">716</span><span id="line-716">    if (left instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">717</span><span id="line-717">      return ByteBufferUtils.equals(((ByteBufferExtendedCell) left).getRowByteBuffer(),</span>
-<span class="source-line-no">718</span><span id="line-718">        ((ByteBufferExtendedCell) left).getRowPosition(), left.getRowLength(), buf, offset, length);</span>
-<span class="source-line-no">719</span><span id="line-719">    }</span>
-<span class="source-line-no">720</span><span id="line-720">    return Bytes.equals(left.getRowArray(), left.getRowOffset(), left.getRowLength(), buf, offset,</span>
-<span class="source-line-no">721</span><span id="line-721">      length);</span>
-<span class="source-line-no">722</span><span id="line-722">  }</span>
-<span class="source-line-no">723</span><span id="line-723"></span>
-<span class="source-line-no">724</span><span id="line-724">  public static boolean matchingFamily(final Cell left, final byte[] buf, final int offset,</span>
-<span class="source-line-no">725</span><span id="line-725">    final int length) {</span>
-<span class="source-line-no">726</span><span id="line-726">    if (left instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">727</span><span id="line-727">      return ByteBufferUtils.equals(((ByteBufferExtendedCell) left).getFamilyByteBuffer(),</span>
-<span class="source-line-no">728</span><span id="line-728">        ((ByteBufferExtendedCell) left).getFamilyPosition(), left.getFamilyLength(), buf, offset,</span>
-<span class="source-line-no">729</span><span id="line-729">        length);</span>
-<span class="source-line-no">730</span><span id="line-730">    }</span>
-<span class="source-line-no">731</span><span id="line-731">    return Bytes.equals(left.getFamilyArray(), left.getFamilyOffset(), left.getFamilyLength(), buf,</span>
-<span class="source-line-no">732</span><span id="line-732">      offset, length);</span>
-<span class="source-line-no">733</span><span id="line-733">  }</span>
-<span class="source-line-no">734</span><span id="line-734"></span>
-<span class="source-line-no">735</span><span id="line-735">  /**</span>
-<span class="source-line-no">736</span><span id="line-736">   * Finds if the qualifier part of the cell and the KV serialized byte[] are equal</span>
-<span class="source-line-no">737</span><span id="line-737">   * @param left   the cell with which we need to match the qualifier</span>
-<span class="source-line-no">738</span><span id="line-738">   * @param buf    the serialized keyvalue format byte[]</span>
-<span class="source-line-no">739</span><span id="line-739">   * @param offset the offset of the qualifier in the byte[]</span>
-<span class="source-line-no">740</span><span id="line-740">   * @param length the length of the qualifier in the byte[]</span>
-<span class="source-line-no">741</span><span id="line-741">   * @return true if the qualifier matches, false otherwise</span>
-<span class="source-line-no">742</span><span id="line-742">   */</span>
-<span class="source-line-no">743</span><span id="line-743">  public static boolean matchingQualifier(final Cell left, final byte[] buf, final int offset,</span>
-<span class="source-line-no">744</span><span id="line-744">    final int length) {</span>
-<span class="source-line-no">745</span><span id="line-745">    if (buf == null) {</span>
-<span class="source-line-no">746</span><span id="line-746">      return left.getQualifierLength() == 0;</span>
-<span class="source-line-no">747</span><span id="line-747">    }</span>
-<span class="source-line-no">748</span><span id="line-748">    if (left instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">749</span><span id="line-749">      return ByteBufferUtils.equals(((ByteBufferExtendedCell) left).getQualifierByteBuffer(),</span>
-<span class="source-line-no">750</span><span id="line-750">        ((ByteBufferExtendedCell) left).getQualifierPosition(), left.getQualifierLength(), buf,</span>
-<span class="source-line-no">751</span><span id="line-751">        offset, length);</span>
-<span class="source-line-no">752</span><span id="line-752">    }</span>
-<span class="source-line-no">753</span><span id="line-753">    return Bytes.equals(left.getQualifierArray(), left.getQualifierOffset(),</span>
-<span class="source-line-no">754</span><span id="line-754">      left.getQualifierLength(), buf, offset, length);</span>
-<span class="source-line-no">755</span><span id="line-755">  }</span>
-<span class="source-line-no">756</span><span id="line-756"></span>
-<span class="source-line-no">757</span><span id="line-757">  /**</span>
-<span class="source-line-no">758</span><span id="line-758">   * Finds if the start of the qualifier part of the Cell matches &lt;code&gt;buf&lt;/code&gt;</span>
-<span class="source-line-no">759</span><span id="line-759">   * @param left       the cell with which we need to match the qualifier</span>
-<span class="source-line-no">760</span><span id="line-760">   * @param startsWith the serialized keyvalue format byte[]</span>
-<span class="source-line-no">761</span><span id="line-761">   * @return true if the qualifier have same staring characters, false otherwise</span>
-<span class="source-line-no">762</span><span id="line-762">   */</span>
-<span class="source-line-no">763</span><span id="line-763">  public static boolean qualifierStartsWith(final Cell left, final byte[] startsWith) {</span>
-<span class="source-line-no">764</span><span id="line-764">    if (startsWith == null || startsWith.length == 0) {</span>
-<span class="source-line-no">765</span><span id="line-765">      throw new IllegalArgumentException("Cannot pass an empty startsWith");</span>
-<span class="source-line-no">766</span><span id="line-766">    }</span>
-<span class="source-line-no">767</span><span id="line-767">    if (left.getQualifierLength() &lt; startsWith.length) {</span>
-<span class="source-line-no">768</span><span id="line-768">      return false;</span>
-<span class="source-line-no">769</span><span id="line-769">    }</span>
-<span class="source-line-no">770</span><span id="line-770">    if (left instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">771</span><span id="line-771">      return ByteBufferUtils.equals(((ByteBufferExtendedCell) left).getQualifierByteBuffer(),</span>
-<span class="source-line-no">772</span><span id="line-772">        ((ByteBufferExtendedCell) left).getQualifierPosition(), startsWith.length, startsWith, 0,</span>
-<span class="source-line-no">773</span><span id="line-773">        startsWith.length);</span>
-<span class="source-line-no">774</span><span id="line-774">    }</span>
-<span class="source-line-no">775</span><span id="line-775">    return Bytes.equals(left.getQualifierArray(), left.getQualifierOffset(), startsWith.length,</span>
-<span class="source-line-no">776</span><span id="line-776">      startsWith, 0, startsWith.length);</span>
-<span class="source-line-no">777</span><span id="line-777">  }</span>
-<span class="source-line-no">778</span><span id="line-778"></span>
-<span class="source-line-no">779</span><span id="line-779">  public static boolean matchingColumn(final Cell left, final byte[] fam, final int foffset,</span>
-<span class="source-line-no">780</span><span id="line-780">    final int flength, final byte[] qual, final int qoffset, final int qlength) {</span>
-<span class="source-line-no">781</span><span id="line-781">    if (!matchingFamily(left, fam, foffset, flength)) {</span>
-<span class="source-line-no">782</span><span id="line-782">      return false;</span>
-<span class="source-line-no">783</span><span id="line-783">    }</span>
-<span class="source-line-no">784</span><span id="line-784">    return matchingQualifier(left, qual, qoffset, qlength);</span>
-<span class="source-line-no">785</span><span id="line-785">  }</span>
-<span class="source-line-no">786</span><span id="line-786"></span>
-<span class="source-line-no">787</span><span id="line-787">  public static boolean matchingValue(final Cell left, final Cell right, int lvlength,</span>
-<span class="source-line-no">788</span><span id="line-788">    int rvlength) {</span>
-<span class="source-line-no">789</span><span id="line-789">    if (left instanceof ByteBufferExtendedCell &amp;&amp; right instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">790</span><span id="line-790">      return ByteBufferUtils.equals(((ByteBufferExtendedCell) left).getValueByteBuffer(),</span>
-<span class="source-line-no">791</span><span id="line-791">        ((ByteBufferExtendedCell) left).getValuePosition(), lvlength,</span>
-<span class="source-line-no">792</span><span id="line-792">        ((ByteBufferExtendedCell) right).getValueByteBuffer(),</span>
-<span class="source-line-no">793</span><span id="line-793">        ((ByteBufferExtendedCell) right).getValuePosition(), rvlength);</span>
-<span class="source-line-no">794</span><span id="line-794">    }</span>
-<span class="source-line-no">795</span><span id="line-795">    if (left instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">796</span><span id="line-796">      return ByteBufferUtils.equals(((ByteBufferExtendedCell) left).getValueByteBuffer(),</span>
-<span class="source-line-no">797</span><span id="line-797">        ((ByteBufferExtendedCell) left).getValuePosition(), lvlength, right.getValueArray(),</span>
-<span class="source-line-no">798</span><span id="line-798">        right.getValueOffset(), rvlength);</span>
-<span class="source-line-no">799</span><span id="line-799">    }</span>
-<span class="source-line-no">800</span><span id="line-800">    if (right instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">801</span><span id="line-801">      return ByteBufferUtils.equals(((ByteBufferExtendedCell) right).getValueByteBuffer(),</span>
-<span class="source-line-no">802</span><span id="line-802">        ((ByteBufferExtendedCell) right).getValuePosition(), rvlength, left.getValueArray(),</span>
-<span class="source-line-no">803</span><span id="line-803">        left.getValueOffset(), lvlength);</span>
-<span class="source-line-no">804</span><span id="line-804">    }</span>
-<span class="source-line-no">805</span><span id="line-805">    return Bytes.equals(left.getValueArray(), left.getValueOffset(), lvlength,</span>
-<span class="source-line-no">806</span><span id="line-806">      right.getValueArray(), right.getValueOffset(), rvlength);</span>
-<span class="source-line-no">807</span><span id="line-807">  }</span>
-<span class="source-line-no">808</span><span id="line-808"></span>
-<span class="source-line-no">809</span><span id="line-809">  public static boolean matchingType(ExtendedCell a, ExtendedCell b) {</span>
-<span class="source-line-no">810</span><span id="line-810">    return a.getTypeByte() == b.getTypeByte();</span>
-<span class="source-line-no">811</span><span id="line-811">  }</span>
-<span class="source-line-no">812</span><span id="line-812"></span>
-<span class="source-line-no">813</span><span id="line-813">  public static boolean matchingTags(final ExtendedCell left, final ExtendedCell right) {</span>
-<span class="source-line-no">814</span><span id="line-814">    return matchingTags(left, right, left.getTagsLength(), right.getTagsLength());</span>
-<span class="source-line-no">815</span><span id="line-815">  }</span>
-<span class="source-line-no">816</span><span id="line-816"></span>
-<span class="source-line-no">817</span><span id="line-817">  public static boolean matchingTags(final ExtendedCell left, final ExtendedCell right, int llength,</span>
-<span class="source-line-no">818</span><span id="line-818">    int rlength) {</span>
-<span class="source-line-no">819</span><span id="line-819">    if (left instanceof ByteBufferExtendedCell &amp;&amp; right instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">820</span><span id="line-820">      ByteBufferExtendedCell leftBBCell = (ByteBufferExtendedCell) left;</span>
-<span class="source-line-no">821</span><span id="line-821">      ByteBufferExtendedCell rightBBCell = (ByteBufferExtendedCell) right;</span>
-<span class="source-line-no">822</span><span id="line-822">      return ByteBufferUtils.equals(leftBBCell.getTagsByteBuffer(), leftBBCell.getTagsPosition(),</span>
-<span class="source-line-no">823</span><span id="line-823">        llength, rightBBCell.getTagsByteBuffer(), rightBBCell.getTagsPosition(), rlength);</span>
-<span class="source-line-no">824</span><span id="line-824">    }</span>
-<span class="source-line-no">825</span><span id="line-825">    if (left instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">826</span><span id="line-826">      ByteBufferExtendedCell leftBBCell = (ByteBufferExtendedCell) left;</span>
-<span class="source-line-no">827</span><span id="line-827">      return ByteBufferUtils.equals(leftBBCell.getTagsByteBuffer(), leftBBCell.getTagsPosition(),</span>
-<span class="source-line-no">828</span><span id="line-828">        llength, right.getTagsArray(), right.getTagsOffset(), rlength);</span>
-<span class="source-line-no">829</span><span id="line-829">    }</span>
-<span class="source-line-no">830</span><span id="line-830">    if (right instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">831</span><span id="line-831">      ByteBufferExtendedCell rightBBCell = (ByteBufferExtendedCell) right;</span>
-<span class="source-line-no">832</span><span id="line-832">      return ByteBufferUtils.equals(rightBBCell.getTagsByteBuffer(), rightBBCell.getTagsPosition(),</span>
-<span class="source-line-no">833</span><span id="line-833">        rlength, left.getTagsArray(), left.getTagsOffset(), llength);</span>
-<span class="source-line-no">834</span><span id="line-834">    }</span>
-<span class="source-line-no">835</span><span id="line-835">    return Bytes.equals(left.getTagsArray(), left.getTagsOffset(), llength, right.getTagsArray(),</span>
-<span class="source-line-no">836</span><span id="line-836">      right.getTagsOffset(), rlength);</span>
-<span class="source-line-no">837</span><span id="line-837">  }</span>
-<span class="source-line-no">838</span><span id="line-838"></span>
-<span class="source-line-no">839</span><span id="line-839">  /**</span>
-<span class="source-line-no">840</span><span id="line-840">   * Return true if a delete type, a {@link KeyValue.Type#Delete} or a {KeyValue.Type#DeleteFamily}</span>
-<span class="source-line-no">841</span><span id="line-841">   * or a {@link KeyValue.Type#DeleteColumn} KeyValue type.</span>
-<span class="source-line-no">842</span><span id="line-842">   */</span>
-<span class="source-line-no">843</span><span id="line-843">  public static boolean isDelete(final byte type) {</span>
-<span class="source-line-no">844</span><span id="line-844">    return KeyValue.Type.Delete.getCode() &lt;= type &amp;&amp; type &lt;= KeyValue.Type.DeleteFamily.getCode();</span>
-<span class="source-line-no">845</span><span id="line-845">  }</span>
-<span class="source-line-no">846</span><span id="line-846"></span>
-<span class="source-line-no">847</span><span id="line-847">  /** Returns True if this cell is a {@link KeyValue.Type#Delete} type. */</span>
-<span class="source-line-no">848</span><span id="line-848">  public static boolean isDeleteType(ExtendedCell cell) {</span>
-<span class="source-line-no">849</span><span id="line-849">    return cell.getTypeByte() == KeyValue.Type.Delete.getCode();</span>
-<span class="source-line-no">850</span><span id="line-850">  }</span>
-<span class="source-line-no">851</span><span id="line-851"></span>
-<span class="source-line-no">852</span><span id="line-852">  public static boolean isDeleteFamily(final ExtendedCell cell) {</span>
-<span class="source-line-no">853</span><span id="line-853">    return cell.getTypeByte() == KeyValue.Type.DeleteFamily.getCode();</span>
-<span class="source-line-no">854</span><span id="line-854">  }</span>
-<span class="source-line-no">855</span><span id="line-855"></span>
-<span class="source-line-no">856</span><span id="line-856">  public static boolean isDeleteFamilyVersion(final ExtendedCell cell) {</span>
-<span class="source-line-no">857</span><span id="line-857">    return cell.getTypeByte() == KeyValue.Type.DeleteFamilyVersion.getCode();</span>
-<span class="source-line-no">858</span><span id="line-858">  }</span>
-<span class="source-line-no">859</span><span id="line-859"></span>
-<span class="source-line-no">860</span><span id="line-860">  public static boolean isDeleteColumns(final ExtendedCell cell) {</span>
-<span class="source-line-no">861</span><span id="line-861">    return cell.getTypeByte() == KeyValue.Type.DeleteColumn.getCode();</span>
-<span class="source-line-no">862</span><span id="line-862">  }</span>
-<span class="source-line-no">863</span><span id="line-863"></span>
-<span class="source-line-no">864</span><span id="line-864">  public static boolean isDeleteColumnVersion(final ExtendedCell cell) {</span>
-<span class="source-line-no">865</span><span id="line-865">    return cell.getTypeByte() == KeyValue.Type.Delete.getCode();</span>
-<span class="source-line-no">866</span><span id="line-866">  }</span>
-<span class="source-line-no">867</span><span id="line-867"></span>
-<span class="source-line-no">868</span><span id="line-868">  /** Returns True if this cell is a delete family or column type. */</span>
-<span class="source-line-no">869</span><span id="line-869">  public static boolean isDeleteColumnOrFamily(ExtendedCell cell) {</span>
-<span class="source-line-no">870</span><span id="line-870">    int t = cell.getTypeByte();</span>
-<span class="source-line-no">871</span><span id="line-871">    return t == KeyValue.Type.DeleteColumn.getCode() || t == KeyValue.Type.DeleteFamily.getCode();</span>
-<span class="source-line-no">872</span><span id="line-872">  }</span>
-<span class="source-line-no">873</span><span id="line-873"></span>
-<span class="source-line-no">874</span><span id="line-874">  public static byte[] cloneTags(ExtendedCell cell) {</span>
-<span class="source-line-no">875</span><span id="line-875">    byte[] output = new byte[cell.getTagsLength()];</span>
-<span class="source-line-no">876</span><span id="line-876">    copyTagsTo(cell, output, 0);</span>
-<span class="source-line-no">877</span><span id="line-877">    return output;</span>
-<span class="source-line-no">878</span><span id="line-878">  }</span>
-<span class="source-line-no">879</span><span id="line-879"></span>
-<span class="source-line-no">880</span><span id="line-880">  /** Copies the tags info into the tag portion of the cell */</span>
-<span class="source-line-no">881</span><span id="line-881">  public static int copyTagsTo(ExtendedCell cell, byte[] destination, int destinationOffset) {</span>
-<span class="source-line-no">882</span><span id="line-882">    int tlen = cell.getTagsLength();</span>
-<span class="source-line-no">883</span><span id="line-883">    if (cell instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">884</span><span id="line-884">      ByteBufferUtils.copyFromBufferToArray(destination,</span>
-<span class="source-line-no">885</span><span id="line-885">        ((ByteBufferExtendedCell) cell).getTagsByteBuffer(),</span>
-<span class="source-line-no">886</span><span id="line-886">        ((ByteBufferExtendedCell) cell).getTagsPosition(), destinationOffset, tlen);</span>
-<span class="source-line-no">887</span><span id="line-887">    } else {</span>
-<span class="source-line-no">888</span><span id="line-888">      System.arraycopy(cell.getTagsArray(), cell.getTagsOffset(), destination, destinationOffset,</span>
-<span class="source-line-no">889</span><span id="line-889">        tlen);</span>
-<span class="source-line-no">890</span><span id="line-890">    }</span>
-<span class="source-line-no">891</span><span id="line-891">    return destinationOffset + tlen;</span>
-<span class="source-line-no">892</span><span id="line-892">  }</span>
-<span class="source-line-no">893</span><span id="line-893"></span>
-<span class="source-line-no">894</span><span id="line-894">  /** Copies the tags info into the tag portion of the cell */</span>
-<span class="source-line-no">895</span><span id="line-895">  public static int copyTagsTo(ExtendedCell cell, ByteBuffer destination, int destinationOffset) {</span>
-<span class="source-line-no">896</span><span id="line-896">    int tlen = cell.getTagsLength();</span>
-<span class="source-line-no">897</span><span id="line-897">    if (cell instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">898</span><span id="line-898">      ByteBufferUtils.copyFromBufferToBuffer(((ByteBufferExtendedCell) cell).getTagsByteBuffer(),</span>
-<span class="source-line-no">899</span><span id="line-899">        destination, ((ByteBufferExtendedCell) cell).getTagsPosition(), destinationOffset, tlen);</span>
-<span class="source-line-no">900</span><span id="line-900">    } else {</span>
-<span class="source-line-no">901</span><span id="line-901">      ByteBufferUtils.copyFromArrayToBuffer(destination, destinationOffset, cell.getTagsArray(),</span>
-<span class="source-line-no">902</span><span id="line-902">        cell.getTagsOffset(), tlen);</span>
-<span class="source-line-no">903</span><span id="line-903">    }</span>
-<span class="source-line-no">904</span><span id="line-904">    return destinationOffset + tlen;</span>
-<span class="source-line-no">905</span><span id="line-905">  }</span>
-<span class="source-line-no">906</span><span id="line-906"></span>
-<span class="source-line-no">907</span><span id="line-907">  /**</span>
-<span class="source-line-no">908</span><span id="line-908">   * Return tags in the given Cell as a List</span>
-<span class="source-line-no">909</span><span id="line-909">   * @param cell The Cell</span>
-<span class="source-line-no">910</span><span id="line-910">   * @return Tags in the given Cell as a List</span>
-<span class="source-line-no">911</span><span id="line-911">   */</span>
-<span class="source-line-no">912</span><span id="line-912">  public static List&lt;Tag&gt; getTags(ExtendedCell cell) {</span>
-<span class="source-line-no">913</span><span id="line-913">    List&lt;Tag&gt; tags = new ArrayList&lt;&gt;();</span>
-<span class="source-line-no">914</span><span id="line-914">    Iterator&lt;Tag&gt; tagsItr = tagsIterator(cell);</span>
-<span class="source-line-no">915</span><span id="line-915">    while (tagsItr.hasNext()) {</span>
-<span class="source-line-no">916</span><span id="line-916">      tags.add(tagsItr.next());</span>
-<span class="source-line-no">917</span><span id="line-917">    }</span>
-<span class="source-line-no">918</span><span id="line-918">    return tags;</span>
-<span class="source-line-no">919</span><span id="line-919">  }</span>
-<span class="source-line-no">920</span><span id="line-920"></span>
-<span class="source-line-no">921</span><span id="line-921">  /**</span>
-<span class="source-line-no">922</span><span id="line-922">   * Retrieve Cell's first tag, matching the passed in type</span>
-<span class="source-line-no">923</span><span id="line-923">   * @param cell The Cell</span>
-<span class="source-line-no">924</span><span id="line-924">   * @param type Type of the Tag to retrieve</span>
-<span class="source-line-no">925</span><span id="line-925">   * @return Optional, empty if there is no tag of the passed in tag type</span>
-<span class="source-line-no">926</span><span id="line-926">   */</span>
-<span class="source-line-no">927</span><span id="line-927">  public static Optional&lt;Tag&gt; getTag(ExtendedCell cell, byte type) {</span>
-<span class="source-line-no">928</span><span id="line-928">    boolean bufferBacked = cell instanceof ByteBufferExtendedCell;</span>
-<span class="source-line-no">929</span><span id="line-929">    int length = cell.getTagsLength();</span>
-<span class="source-line-no">930</span><span id="line-930">    int offset =</span>
-<span class="source-line-no">931</span><span id="line-931">      bufferBacked ? ((ByteBufferExtendedCell) cell).getTagsPosition() : cell.getTagsOffset();</span>
-<span class="source-line-no">932</span><span id="line-932">    int pos = offset;</span>
-<span class="source-line-no">933</span><span id="line-933">    while (pos &lt; offset + length) {</span>
-<span class="source-line-no">934</span><span id="line-934">      int tagLen;</span>
-<span class="source-line-no">935</span><span id="line-935">      if (bufferBacked) {</span>
-<span class="source-line-no">936</span><span id="line-936">        ByteBuffer tagsBuffer = ((ByteBufferExtendedCell) cell).getTagsByteBuffer();</span>
-<span class="source-line-no">937</span><span id="line-937">        tagLen = ByteBufferUtils.readAsInt(tagsBuffer, pos, TAG_LENGTH_SIZE);</span>
-<span class="source-line-no">938</span><span id="line-938">        if (ByteBufferUtils.toByte(tagsBuffer, pos + TAG_LENGTH_SIZE) == type) {</span>
-<span class="source-line-no">939</span><span id="line-939">          return Optional.of(new ByteBufferTag(tagsBuffer, pos, tagLen + TAG_LENGTH_SIZE));</span>
-<span class="source-line-no">940</span><span id="line-940">        }</span>
-<span class="source-line-no">941</span><span id="line-941">      } else {</span>
-<span class="source-line-no">942</span><span id="line-942">        tagLen = Bytes.readAsInt(cell.getTagsArray(), pos, TAG_LENGTH_SIZE);</span>
-<span class="source-line-no">943</span><span id="line-943">        if (cell.getTagsArray()[pos + TAG_LENGTH_SIZE] == type) {</span>
-<span class="source-line-no">944</span><span id="line-944">          return Optional</span>
-<span class="source-line-no">945</span><span id="line-945">            .of(new ArrayBackedTag(cell.getTagsArray(), pos, tagLen + TAG_LENGTH_SIZE));</span>
-<span class="source-line-no">946</span><span id="line-946">        }</span>
-<span class="source-line-no">947</span><span id="line-947">      }</span>
-<span class="source-line-no">948</span><span id="line-948">      pos += TAG_LENGTH_SIZE + tagLen;</span>
-<span class="source-line-no">949</span><span id="line-949">    }</span>
-<span class="source-line-no">950</span><span id="line-950">    return Optional.empty();</span>
-<span class="source-line-no">951</span><span id="line-951">  }</span>
-<span class="source-line-no">952</span><span id="line-952"></span>
-<span class="source-line-no">953</span><span id="line-953">  /**</span>
-<span class="source-line-no">954</span><span id="line-954">   * Utility method to iterate through the tags in the given cell.</span>
-<span class="source-line-no">955</span><span id="line-955">   * @param cell The Cell over which tags iterator is needed.</span>
-<span class="source-line-no">956</span><span id="line-956">   * @return iterator for the tags</span>
-<span class="source-line-no">957</span><span id="line-957">   */</span>
-<span class="source-line-no">958</span><span id="line-958">  public static Iterator&lt;Tag&gt; tagsIterator(final ExtendedCell cell) {</span>
-<span class="source-line-no">959</span><span id="line-959">    final int tagsLength = cell.getTagsLength();</span>
-<span class="source-line-no">960</span><span id="line-960">    // Save an object allocation where we can</span>
-<span class="source-line-no">961</span><span id="line-961">    if (tagsLength == 0) {</span>
-<span class="source-line-no">962</span><span id="line-962">      return TagUtil.EMPTY_TAGS_ITR;</span>
-<span class="source-line-no">963</span><span id="line-963">    }</span>
-<span class="source-line-no">964</span><span id="line-964">    if (cell instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">965</span><span id="line-965">      return tagsIterator(((ByteBufferExtendedCell) cell).getTagsByteBuffer(),</span>
-<span class="source-line-no">966</span><span id="line-966">        ((ByteBufferExtendedCell) cell).getTagsPosition(), tagsLength);</span>
-<span class="source-line-no">967</span><span id="line-967">    }</span>
-<span class="source-line-no">968</span><span id="line-968"></span>
-<span class="source-line-no">969</span><span id="line-969">    return new Iterator&lt;Tag&gt;() {</span>
-<span class="source-line-no">970</span><span id="line-970">      private int offset = cell.getTagsOffset();</span>
-<span class="source-line-no">971</span><span id="line-971">      private int pos = offset;</span>
-<span class="source-line-no">972</span><span id="line-972">      private int endOffset = offset + cell.getTagsLength() - 1;</span>
-<span class="source-line-no">973</span><span id="line-973"></span>
-<span class="source-line-no">974</span><span id="line-974">      @Override</span>
-<span class="source-line-no">975</span><span id="line-975">      public boolean hasNext() {</span>
-<span class="source-line-no">976</span><span id="line-976">        return this.pos &lt; endOffset;</span>
-<span class="source-line-no">977</span><span id="line-977">      }</span>
-<span class="source-line-no">978</span><span id="line-978"></span>
-<span class="source-line-no">979</span><span id="line-979">      @Override</span>
-<span class="source-line-no">980</span><span id="line-980">      public Tag next() {</span>
-<span class="source-line-no">981</span><span id="line-981">        if (hasNext()) {</span>
-<span class="source-line-no">982</span><span id="line-982">          byte[] tags = cell.getTagsArray();</span>
-<span class="source-line-no">983</span><span id="line-983">          int curTagLen = Bytes.readAsInt(tags, this.pos, Tag.TAG_LENGTH_SIZE);</span>
-<span class="source-line-no">984</span><span id="line-984">          Tag tag = new ArrayBackedTag(tags, pos, curTagLen + TAG_LENGTH_SIZE);</span>
-<span class="source-line-no">985</span><span id="line-985">          this.pos += Bytes.SIZEOF_SHORT + curTagLen;</span>
-<span class="source-line-no">986</span><span id="line-986">          return tag;</span>
-<span class="source-line-no">987</span><span id="line-987">        }</span>
-<span class="source-line-no">988</span><span id="line-988">        return null;</span>
-<span class="source-line-no">989</span><span id="line-989">      }</span>
-<span class="source-line-no">990</span><span id="line-990"></span>
-<span class="source-line-no">991</span><span id="line-991">      @Override</span>
-<span class="source-line-no">992</span><span id="line-992">      public void remove() {</span>
-<span class="source-line-no">993</span><span id="line-993">        throw new UnsupportedOperationException();</span>
-<span class="source-line-no">994</span><span id="line-994">      }</span>
-<span class="source-line-no">995</span><span id="line-995">    };</span>
-<span class="source-line-no">996</span><span id="line-996">  }</span>
-<span class="source-line-no">997</span><span id="line-997"></span>
-<span class="source-line-no">998</span><span id="line-998">  public static Iterator&lt;Tag&gt; tagsIterator(final ByteBuffer tags, final int offset,</span>
-<span class="source-line-no">999</span><span id="line-999">    final int length) {</span>
-<span class="source-line-no">1000</span><span id="line-1000">    return new Iterator&lt;Tag&gt;() {</span>
-<span class="source-line-no">1001</span><span id="line-1001">      private int pos = offset;</span>
-<span class="source-line-no">1002</span><span id="line-1002">      private int endOffset = offset + length - 1;</span>
-<span class="source-line-no">1003</span><span id="line-1003"></span>
-<span class="source-line-no">1004</span><span id="line-1004">      @Override</span>
-<span class="source-line-no">1005</span><span id="line-1005">      public boolean hasNext() {</span>
-<span class="source-line-no">1006</span><span id="line-1006">        return this.pos &lt; endOffset;</span>
-<span class="source-line-no">1007</span><span id="line-1007">      }</span>
-<span class="source-line-no">1008</span><span id="line-1008"></span>
-<span class="source-line-no">1009</span><span id="line-1009">      @Override</span>
-<span class="source-line-no">1010</span><span id="line-1010">      public Tag next() {</span>
-<span class="source-line-no">1011</span><span id="line-1011">        if (hasNext()) {</span>
-<span class="source-line-no">1012</span><span id="line-1012">          int curTagLen = ByteBufferUtils.readAsInt(tags, this.pos, Tag.TAG_LENGTH_SIZE);</span>
-<span class="source-line-no">1013</span><span id="line-1013">          Tag tag = new ByteBufferTag(tags, pos, curTagLen + Tag.TAG_LENGTH_SIZE);</span>
-<span class="source-line-no">1014</span><span id="line-1014">          this.pos += Bytes.SIZEOF_SHORT + curTagLen;</span>
-<span class="source-line-no">1015</span><span id="line-1015">          return tag;</span>
-<span class="source-line-no">1016</span><span id="line-1016">        }</span>
-<span class="source-line-no">1017</span><span id="line-1017">        return null;</span>
-<span class="source-line-no">1018</span><span id="line-1018">      }</span>
-<span class="source-line-no">1019</span><span id="line-1019"></span>
-<span class="source-line-no">1020</span><span id="line-1020">      @Override</span>
-<span class="source-line-no">1021</span><span id="line-1021">      public void remove() {</span>
-<span class="source-line-no">1022</span><span id="line-1022">        throw new UnsupportedOperationException();</span>
-<span class="source-line-no">1023</span><span id="line-1023">      }</span>
-<span class="source-line-no">1024</span><span id="line-1024">    };</span>
-<span class="source-line-no">1025</span><span id="line-1025">  }</span>
-<span class="source-line-no">1026</span><span id="line-1026"></span>
-<span class="source-line-no">1027</span><span id="line-1027">  /**</span>
-<span class="source-line-no">1028</span><span id="line-1028">   * Returns true if the first range start1...end1 overlaps with the second range start2...end2,</span>
-<span class="source-line-no">1029</span><span id="line-1029">   * assuming the byte arrays represent row keys</span>
-<span class="source-line-no">1030</span><span id="line-1030">   */</span>
-<span class="source-line-no">1031</span><span id="line-1031">  public static boolean overlappingKeys(final byte[] start1, final byte[] end1, final byte[] start2,</span>
-<span class="source-line-no">1032</span><span id="line-1032">    final byte[] end2) {</span>
-<span class="source-line-no">1033</span><span id="line-1033">    return (end2.length == 0 || start1.length == 0 || Bytes.compareTo(start1, end2) &lt; 0)</span>
-<span class="source-line-no">1034</span><span id="line-1034">      &amp;&amp; (end1.length == 0 || start2.length == 0 || Bytes.compareTo(start2, end1) &lt; 0);</span>
-<span class="source-line-no">1035</span><span id="line-1035">  }</span>
-<span class="source-line-no">1036</span><span id="line-1036"></span>
-<span class="source-line-no">1037</span><span id="line-1037">  /** Write rowkey excluding the common part. */</span>
-<span class="source-line-no">1038</span><span id="line-1038">  public static void writeRowKeyExcludingCommon(Cell cell, short rLen, int commonPrefix,</span>
-<span class="source-line-no">1039</span><span id="line-1039">    DataOutputStream out) throws IOException {</span>
-<span class="source-line-no">1040</span><span id="line-1040">    if (commonPrefix == 0) {</span>
-<span class="source-line-no">1041</span><span id="line-1041">      out.writeShort(rLen);</span>
-<span class="source-line-no">1042</span><span id="line-1042">    } else if (commonPrefix == 1) {</span>
-<span class="source-line-no">1043</span><span id="line-1043">      out.writeByte((byte) rLen);</span>
-<span class="source-line-no">1044</span><span id="line-1044">      commonPrefix--;</span>
-<span class="source-line-no">1045</span><span id="line-1045">    } else {</span>
-<span class="source-line-no">1046</span><span id="line-1046">      commonPrefix -= KeyValue.ROW_LENGTH_SIZE;</span>
-<span class="source-line-no">1047</span><span id="line-1047">    }</span>
-<span class="source-line-no">1048</span><span id="line-1048">    if (rLen &gt; commonPrefix) {</span>
-<span class="source-line-no">1049</span><span id="line-1049">      writeRowSkippingBytes(out, cell, rLen, commonPrefix);</span>
-<span class="source-line-no">1050</span><span id="line-1050">    }</span>
-<span class="source-line-no">1051</span><span id="line-1051">  }</span>
-<span class="source-line-no">1052</span><span id="line-1052"></span>
-<span class="source-line-no">1053</span><span id="line-1053">  /**</span>
-<span class="source-line-no">1054</span><span id="line-1054">   * Writes the row from the given cell to the output stream excluding the common prefix</span>
-<span class="source-line-no">1055</span><span id="line-1055">   * @param out     The dataoutputstream to which the data has to be written</span>
-<span class="source-line-no">1056</span><span id="line-1056">   * @param cell    The cell whose contents has to be written</span>
-<span class="source-line-no">1057</span><span id="line-1057">   * @param rlength the row length</span>
-<span class="source-line-no">1058</span><span id="line-1058">   */</span>
-<span class="source-line-no">1059</span><span id="line-1059">  public static void writeRowSkippingBytes(DataOutputStream out, Cell cell, short rlength,</span>
-<span class="source-line-no">1060</span><span id="line-1060">    int commonPrefix) throws IOException {</span>
-<span class="source-line-no">1061</span><span id="line-1061">    if (cell instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">1062</span><span id="line-1062">      ByteBufferUtils.copyBufferToStream((DataOutput) out,</span>
-<span class="source-line-no">1063</span><span id="line-1063">        ((ByteBufferExtendedCell) cell).getRowByteBuffer(),</span>
-<span class="source-line-no">1064</span><span id="line-1064">        ((ByteBufferExtendedCell) cell).getRowPosition() + commonPrefix, rlength - commonPrefix);</span>
-<span class="source-line-no">1065</span><span id="line-1065">    } else {</span>
-<span class="source-line-no">1066</span><span id="line-1066">      out.write(cell.getRowArray(), cell.getRowOffset() + commonPrefix, rlength - commonPrefix);</span>
-<span class="source-line-no">1067</span><span id="line-1067">    }</span>
-<span class="source-line-no">1068</span><span id="line-1068">  }</span>
-<span class="source-line-no">1069</span><span id="line-1069"></span>
-<span class="source-line-no">1070</span><span id="line-1070">  /**</span>
-<span class="source-line-no">1071</span><span id="line-1071">   * Find length of common prefix in keys of the cells, considering key as byte[] if serialized in</span>
-<span class="source-line-no">1072</span><span id="line-1072">   * {@link KeyValue}. The key format is &amp;lt;2 bytes rk len&amp;gt;&amp;lt;rk&amp;gt;&amp;lt;1 byte cf</span>
-<span class="source-line-no">1073</span><span id="line-1073">   * len&amp;gt;&amp;lt;cf&amp;gt;&amp;lt;qualifier&amp;gt;&amp;lt;8 bytes timestamp&amp;gt;&amp;lt;1 byte type&amp;gt;</span>
-<span class="source-line-no">1074</span><span id="line-1074">   * @param c1                the cell</span>
-<span class="source-line-no">1075</span><span id="line-1075">   * @param c2                the cell</span>
-<span class="source-line-no">1076</span><span id="line-1076">   * @param bypassFamilyCheck when true assume the family bytes same in both cells. Pass it as true</span>
-<span class="source-line-no">1077</span><span id="line-1077">   *                          when dealing with Cells in same CF so as to avoid some checks</span>
-<span class="source-line-no">1078</span><span id="line-1078">   * @param withTsType        when true check timestamp and type bytes also.</span>
-<span class="source-line-no">1079</span><span id="line-1079">   * @return length of common prefix</span>
-<span class="source-line-no">1080</span><span id="line-1080">   */</span>
-<span class="source-line-no">1081</span><span id="line-1081">  public static int findCommonPrefixInFlatKey(ExtendedCell c1, ExtendedCell c2,</span>
-<span class="source-line-no">1082</span><span id="line-1082">    boolean bypassFamilyCheck, boolean withTsType) {</span>
-<span class="source-line-no">1083</span><span id="line-1083">    // Compare the 2 bytes in RK length part</span>
-<span class="source-line-no">1084</span><span id="line-1084">    short rLen1 = c1.getRowLength();</span>
-<span class="source-line-no">1085</span><span id="line-1085">    short rLen2 = c2.getRowLength();</span>
-<span class="source-line-no">1086</span><span id="line-1086">    int commonPrefix = KeyValue.ROW_LENGTH_SIZE;</span>
-<span class="source-line-no">1087</span><span id="line-1087">    if (rLen1 != rLen2) {</span>
-<span class="source-line-no">1088</span><span id="line-1088">      // early out when the RK length itself is not matching</span>
-<span class="source-line-no">1089</span><span id="line-1089">      return ByteBufferUtils.findCommonPrefix(Bytes.toBytes(rLen1), 0, KeyValue.ROW_LENGTH_SIZE,</span>
-<span class="source-line-no">1090</span><span id="line-1090">        Bytes.toBytes(rLen2), 0, KeyValue.ROW_LENGTH_SIZE);</span>
-<span class="source-line-no">1091</span><span id="line-1091">    }</span>
-<span class="source-line-no">1092</span><span id="line-1092">    // Compare the RKs</span>
-<span class="source-line-no">1093</span><span id="line-1093">    int rkCommonPrefix = 0;</span>
-<span class="source-line-no">1094</span><span id="line-1094">    if (c1 instanceof ByteBufferExtendedCell &amp;&amp; c2 instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">1095</span><span id="line-1095">      rkCommonPrefix =</span>
-<span class="source-line-no">1096</span><span id="line-1096">        ByteBufferUtils.findCommonPrefix(((ByteBufferExtendedCell) c1).getRowByteBuffer(),</span>
-<span class="source-line-no">1097</span><span id="line-1097">          ((ByteBufferExtendedCell) c1).getRowPosition(), rLen1,</span>
-<span class="source-line-no">1098</span><span id="line-1098">          ((ByteBufferExtendedCell) c2).getRowByteBuffer(),</span>
-<span class="source-line-no">1099</span><span id="line-1099">          ((ByteBufferExtendedCell) c2).getRowPosition(), rLen2);</span>
-<span class="source-line-no">1100</span><span id="line-1100">    } else {</span>
-<span class="source-line-no">1101</span><span id="line-1101">      // There cannot be a case where one cell is BBCell and other is KeyValue. This flow comes</span>
-<span class="source-line-no">1102</span><span id="line-1102">      // either</span>
-<span class="source-line-no">1103</span><span id="line-1103">      // in flush or compactions. In flushes both cells are KV and in case of compaction it will be</span>
-<span class="source-line-no">1104</span><span id="line-1104">      // either</span>
-<span class="source-line-no">1105</span><span id="line-1105">      // KV or BBCell</span>
-<span class="source-line-no">1106</span><span id="line-1106">      rkCommonPrefix = ByteBufferUtils.findCommonPrefix(c1.getRowArray(), c1.getRowOffset(), rLen1,</span>
-<span class="source-line-no">1107</span><span id="line-1107">        c2.getRowArray(), c2.getRowOffset(), rLen2);</span>
-<span class="source-line-no">1108</span><span id="line-1108">    }</span>
-<span class="source-line-no">1109</span><span id="line-1109">    commonPrefix += rkCommonPrefix;</span>
-<span class="source-line-no">1110</span><span id="line-1110">    if (rkCommonPrefix != rLen1) {</span>
-<span class="source-line-no">1111</span><span id="line-1111">      // Early out when RK is not fully matching.</span>
-<span class="source-line-no">1112</span><span id="line-1112">      return commonPrefix;</span>
-<span class="source-line-no">1113</span><span id="line-1113">    }</span>
-<span class="source-line-no">1114</span><span id="line-1114">    // Compare 1 byte CF length part</span>
-<span class="source-line-no">1115</span><span id="line-1115">    byte fLen1 = c1.getFamilyLength();</span>
-<span class="source-line-no">1116</span><span id="line-1116">    if (bypassFamilyCheck) {</span>
-<span class="source-line-no">1117</span><span id="line-1117">      // This flag will be true when caller is sure that the family will be same for both the cells</span>
-<span class="source-line-no">1118</span><span id="line-1118">      // Just make commonPrefix to increment by the family part</span>
-<span class="source-line-no">1119</span><span id="line-1119">      commonPrefix += KeyValue.FAMILY_LENGTH_SIZE + fLen1;</span>
-<span class="source-line-no">1120</span><span id="line-1120">    } else {</span>
-<span class="source-line-no">1121</span><span id="line-1121">      byte fLen2 = c2.getFamilyLength();</span>
-<span class="source-line-no">1122</span><span id="line-1122">      if (fLen1 != fLen2) {</span>
-<span class="source-line-no">1123</span><span id="line-1123">        // early out when the CF length itself is not matching</span>
-<span class="source-line-no">1124</span><span id="line-1124">        return commonPrefix;</span>
-<span class="source-line-no">1125</span><span id="line-1125">      }</span>
-<span class="source-line-no">1126</span><span id="line-1126">      // CF lengths are same so there is one more byte common in key part</span>
-<span class="source-line-no">1127</span><span id="line-1127">      commonPrefix += KeyValue.FAMILY_LENGTH_SIZE;</span>
-<span class="source-line-no">1128</span><span id="line-1128">      // Compare the CF names</span>
-<span class="source-line-no">1129</span><span id="line-1129">      int fCommonPrefix;</span>
-<span class="source-line-no">1130</span><span id="line-1130">      if (c1 instanceof ByteBufferExtendedCell &amp;&amp; c2 instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">1131</span><span id="line-1131">        fCommonPrefix =</span>
-<span class="source-line-no">1132</span><span id="line-1132">          ByteBufferUtils.findCommonPrefix(((ByteBufferExtendedCell) c1).getFamilyByteBuffer(),</span>
-<span class="source-line-no">1133</span><span id="line-1133">            ((ByteBufferExtendedCell) c1).getFamilyPosition(), fLen1,</span>
-<span class="source-line-no">1134</span><span id="line-1134">            ((ByteBufferExtendedCell) c2).getFamilyByteBuffer(),</span>
-<span class="source-line-no">1135</span><span id="line-1135">            ((ByteBufferExtendedCell) c2).getFamilyPosition(), fLen2);</span>
-<span class="source-line-no">1136</span><span id="line-1136">      } else {</span>
-<span class="source-line-no">1137</span><span id="line-1137">        fCommonPrefix = ByteBufferUtils.findCommonPrefix(c1.getFamilyArray(), c1.getFamilyOffset(),</span>
-<span class="source-line-no">1138</span><span id="line-1138">          fLen1, c2.getFamilyArray(), c2.getFamilyOffset(), fLen2);</span>
-<span class="source-line-no">1139</span><span id="line-1139">      }</span>
-<span class="source-line-no">1140</span><span id="line-1140">      commonPrefix += fCommonPrefix;</span>
-<span class="source-line-no">1141</span><span id="line-1141">      if (fCommonPrefix != fLen1) {</span>
-<span class="source-line-no">1142</span><span id="line-1142">        return commonPrefix;</span>
-<span class="source-line-no">1143</span><span id="line-1143">      }</span>
-<span class="source-line-no">1144</span><span id="line-1144">    }</span>
-<span class="source-line-no">1145</span><span id="line-1145">    // Compare the Qualifiers</span>
-<span class="source-line-no">1146</span><span id="line-1146">    int qLen1 = c1.getQualifierLength();</span>
-<span class="source-line-no">1147</span><span id="line-1147">    int qLen2 = c2.getQualifierLength();</span>
-<span class="source-line-no">1148</span><span id="line-1148">    int qCommon;</span>
-<span class="source-line-no">1149</span><span id="line-1149">    if (c1 instanceof ByteBufferExtendedCell &amp;&amp; c2 instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">1150</span><span id="line-1150">      qCommon =</span>
-<span class="source-line-no">1151</span><span id="line-1151">        ByteBufferUtils.findCommonPrefix(((ByteBufferExtendedCell) c1).getQualifierByteBuffer(),</span>
-<span class="source-line-no">1152</span><span id="line-1152">          ((ByteBufferExtendedCell) c1).getQualifierPosition(), qLen1,</span>
-<span class="source-line-no">1153</span><span id="line-1153">          ((ByteBufferExtendedCell) c2).getQualifierByteBuffer(),</span>
-<span class="source-line-no">1154</span><span id="line-1154">          ((ByteBufferExtendedCell) c2).getQualifierPosition(), qLen2);</span>
-<span class="source-line-no">1155</span><span id="line-1155">    } else {</span>
-<span class="source-line-no">1156</span><span id="line-1156">      qCommon = ByteBufferUtils.findCommonPrefix(c1.getQualifierArray(), c1.getQualifierOffset(),</span>
-<span class="source-line-no">1157</span><span id="line-1157">        qLen1, c2.getQualifierArray(), c2.getQualifierOffset(), qLen2);</span>
-<span class="source-line-no">1158</span><span id="line-1158">    }</span>
-<span class="source-line-no">1159</span><span id="line-1159">    commonPrefix += qCommon;</span>
-<span class="source-line-no">1160</span><span id="line-1160">    if (!withTsType || Math.max(qLen1, qLen2) != qCommon) {</span>
-<span class="source-line-no">1161</span><span id="line-1161">      return commonPrefix;</span>
-<span class="source-line-no">1162</span><span id="line-1162">    }</span>
-<span class="source-line-no">1163</span><span id="line-1163">    // Compare the timestamp parts</span>
-<span class="source-line-no">1164</span><span id="line-1164">    int tsCommonPrefix = ByteBufferUtils.findCommonPrefix(Bytes.toBytes(c1.getTimestamp()), 0,</span>
-<span class="source-line-no">1165</span><span id="line-1165">      KeyValue.TIMESTAMP_SIZE, Bytes.toBytes(c2.getTimestamp()), 0, KeyValue.TIMESTAMP_SIZE);</span>
-<span class="source-line-no">1166</span><span id="line-1166">    commonPrefix += tsCommonPrefix;</span>
-<span class="source-line-no">1167</span><span id="line-1167">    if (tsCommonPrefix != KeyValue.TIMESTAMP_SIZE) {</span>
-<span class="source-line-no">1168</span><span id="line-1168">      return commonPrefix;</span>
-<span class="source-line-no">1169</span><span id="line-1169">    }</span>
-<span class="source-line-no">1170</span><span id="line-1170">    // Compare the type</span>
-<span class="source-line-no">1171</span><span id="line-1171">    if (c1.getTypeByte() == c2.getTypeByte()) {</span>
-<span class="source-line-no">1172</span><span id="line-1172">      commonPrefix += KeyValue.TYPE_SIZE;</span>
-<span class="source-line-no">1173</span><span id="line-1173">    }</span>
-<span class="source-line-no">1174</span><span id="line-1174">    return commonPrefix;</span>
-<span class="source-line-no">1175</span><span id="line-1175">  }</span>
-<span class="source-line-no">1176</span><span id="line-1176"></span>
-<span class="source-line-no">1177</span><span id="line-1177">  /**</span>
-<span class="source-line-no">1178</span><span id="line-1178">   * Used to compare two cells based on the column hint provided. This is specifically used when we</span>
-<span class="source-line-no">1179</span><span id="line-1179">   * need to optimize the seeks based on the next indexed key. This is an advanced usage API</span>
-<span class="source-line-no">1180</span><span id="line-1180">   * specifically needed for some optimizations.</span>
-<span class="source-line-no">1181</span><span id="line-1181">   * @param nextIndexedCell the next indexed cell</span>
-<span class="source-line-no">1182</span><span id="line-1182">   * @param currentCell     the cell to be compared</span>
-<span class="source-line-no">1183</span><span id="line-1183">   * @param foff            the family offset of the currentCell</span>
-<span class="source-line-no">1184</span><span id="line-1184">   * @param flen            the family length of the currentCell</span>
-<span class="source-line-no">1185</span><span id="line-1185">   * @param colHint         the column hint provided - could be null</span>
-<span class="source-line-no">1186</span><span id="line-1186">   * @param coff            the offset of the column hint if provided, if not offset of the</span>
-<span class="source-line-no">1187</span><span id="line-1187">   *                        currentCell's qualifier</span>
-<span class="source-line-no">1188</span><span id="line-1188">   * @param clen            the length of the column hint if provided, if not length of the</span>
-<span class="source-line-no">1189</span><span id="line-1189">   *                        currentCell's qualifier</span>
-<span class="source-line-no">1190</span><span id="line-1190">   * @param ts              the timestamp to be seeked</span>
-<span class="source-line-no">1191</span><span id="line-1191">   * @param type            the type to be seeked</span>
-<span class="source-line-no">1192</span><span id="line-1192">   * @return an int based on the given column hint TODO : To be moved out of here because this is a</span>
-<span class="source-line-no">1193</span><span id="line-1193">   *         special API used in scan optimization.</span>
-<span class="source-line-no">1194</span><span id="line-1194">   */</span>
-<span class="source-line-no">1195</span><span id="line-1195">  // compare a key against row/fam/qual/ts/type</span>
-<span class="source-line-no">1196</span><span id="line-1196">  public static final int compareKeyBasedOnColHint(CellComparator comparator,</span>
-<span class="source-line-no">1197</span><span id="line-1197">    ExtendedCell nextIndexedCell, ExtendedCell currentCell, int foff, int flen, byte[] colHint,</span>
-<span class="source-line-no">1198</span><span id="line-1198">    int coff, int clen, long ts, byte type) {</span>
-<span class="source-line-no">1199</span><span id="line-1199">    int compare = comparator.compareRows(nextIndexedCell, currentCell);</span>
-<span class="source-line-no">1200</span><span id="line-1200">    if (compare != 0) {</span>
-<span class="source-line-no">1201</span><span id="line-1201">      return compare;</span>
-<span class="source-line-no">1202</span><span id="line-1202">    }</span>
-<span class="source-line-no">1203</span><span id="line-1203">    // If the column is not specified, the "minimum" key type appears the</span>
-<span class="source-line-no">1204</span><span id="line-1204">    // latest in the sorted order, regardless of the timestamp. This is used</span>
-<span class="source-line-no">1205</span><span id="line-1205">    // for specifying the last key/value in a given row, because there is no</span>
-<span class="source-line-no">1206</span><span id="line-1206">    // "lexicographically last column" (it would be infinitely long). The</span>
-<span class="source-line-no">1207</span><span id="line-1207">    // "maximum" key type does not need this behavior.</span>
-<span class="source-line-no">1208</span><span id="line-1208">    if (</span>
-<span class="source-line-no">1209</span><span id="line-1209">      nextIndexedCell.getFamilyLength() + nextIndexedCell.getQualifierLength() == 0</span>
-<span class="source-line-no">1210</span><span id="line-1210">        &amp;&amp; nextIndexedCell.getTypeByte() == KeyValue.Type.Minimum.getCode()</span>
-<span class="source-line-no">1211</span><span id="line-1211">    ) {</span>
-<span class="source-line-no">1212</span><span id="line-1212">      // left is "bigger", i.e. it appears later in the sorted order</span>
-<span class="source-line-no">1213</span><span id="line-1213">      return 1;</span>
-<span class="source-line-no">1214</span><span id="line-1214">    }</span>
-<span class="source-line-no">1215</span><span id="line-1215">    if (flen + clen == 0 &amp;&amp; type == KeyValue.Type.Minimum.getCode()) {</span>
-<span class="source-line-no">1216</span><span id="line-1216">      return -1;</span>
-<span class="source-line-no">1217</span><span id="line-1217">    }</span>
-<span class="source-line-no">1218</span><span id="line-1218"></span>
-<span class="source-line-no">1219</span><span id="line-1219">    compare = comparator.compareFamilies(nextIndexedCell, currentCell);</span>
-<span class="source-line-no">1220</span><span id="line-1220">    if (compare != 0) {</span>
-<span class="source-line-no">1221</span><span id="line-1221">      return compare;</span>
-<span class="source-line-no">1222</span><span id="line-1222">    }</span>
-<span class="source-line-no">1223</span><span id="line-1223">    if (colHint == null) {</span>
-<span class="source-line-no">1224</span><span id="line-1224">      compare = comparator.compareQualifiers(nextIndexedCell, currentCell);</span>
-<span class="source-line-no">1225</span><span id="line-1225">    } else {</span>
-<span class="source-line-no">1226</span><span id="line-1226">      compare = CellUtil.compareQualifiers(nextIndexedCell, colHint, coff, clen);</span>
-<span class="source-line-no">1227</span><span id="line-1227">    }</span>
-<span class="source-line-no">1228</span><span id="line-1228">    if (compare != 0) {</span>
-<span class="source-line-no">1229</span><span id="line-1229">      return compare;</span>
-<span class="source-line-no">1230</span><span id="line-1230">    }</span>
-<span class="source-line-no">1231</span><span id="line-1231">    // Next compare timestamps.</span>
-<span class="source-line-no">1232</span><span id="line-1232">    compare = comparator.compareTimestamps(nextIndexedCell.getTimestamp(), ts);</span>
-<span class="source-line-no">1233</span><span id="line-1233">    if (compare != 0) {</span>
-<span class="source-line-no">1234</span><span id="line-1234">      return compare;</span>
-<span class="source-line-no">1235</span><span id="line-1235">    }</span>
-<span class="source-line-no">1236</span><span id="line-1236"></span>
-<span class="source-line-no">1237</span><span id="line-1237">    // Compare types. Let the delete types sort ahead of puts; i.e. types</span>
-<span class="source-line-no">1238</span><span id="line-1238">    // of higher numbers sort before those of lesser numbers. Maximum (255)</span>
-<span class="source-line-no">1239</span><span id="line-1239">    // appears ahead of everything, and minimum (0) appears after</span>
-<span class="source-line-no">1240</span><span id="line-1240">    // everything.</span>
-<span class="source-line-no">1241</span><span id="line-1241">    return (0xff &amp; type) - (0xff &amp; nextIndexedCell.getTypeByte());</span>
-<span class="source-line-no">1242</span><span id="line-1242">  }</span>
-<span class="source-line-no">1243</span><span id="line-1243"></span>
-<span class="source-line-no">1244</span><span id="line-1244">  /**</span>
-<span class="source-line-no">1245</span><span id="line-1245">   * Compares only the key portion of a cell. It does not include the sequence id/mvcc of the cell</span>
-<span class="source-line-no">1246</span><span id="line-1246">   * @return an int greater than 0 if left &amp;gt; than right lesser than 0 if left &amp;lt; than right</span>
-<span class="source-line-no">1247</span><span id="line-1247">   *         equal to 0 if left is equal to right</span>
-<span class="source-line-no">1248</span><span id="line-1248">   */</span>
-<span class="source-line-no">1249</span><span id="line-1249">  public static final int compareKeyIgnoresMvcc(CellComparator comparator, Cell left, Cell right) {</span>
-<span class="source-line-no">1250</span><span id="line-1250">    return ((CellComparatorImpl) comparator).compare(left, right, true);</span>
-<span class="source-line-no">1251</span><span id="line-1251">  }</span>
-<span class="source-line-no">1252</span><span id="line-1252"></span>
-<span class="source-line-no">1253</span><span id="line-1253">  /**</span>
-<span class="source-line-no">1254</span><span id="line-1254">   * Compare cell's row against given comparator</span>
-<span class="source-line-no">1255</span><span id="line-1255">   * @param cell       the cell to use for comparison</span>
-<span class="source-line-no">1256</span><span id="line-1256">   * @param comparator the {@link CellComparator} to use for comparison</span>
-<span class="source-line-no">1257</span><span id="line-1257">   * @return result comparing cell's row</span>
-<span class="source-line-no">1258</span><span id="line-1258">   */</span>
-<span class="source-line-no">1259</span><span id="line-1259">  public static int compareRow(Cell cell, ByteArrayComparable comparator) {</span>
-<span class="source-line-no">1260</span><span id="line-1260">    if (cell instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">1261</span><span id="line-1261">      return comparator.compareTo(((ByteBufferExtendedCell) cell).getRowByteBuffer(),</span>
-<span class="source-line-no">1262</span><span id="line-1262">        ((ByteBufferExtendedCell) cell).getRowPosition(), cell.getRowLength());</span>
-<span class="source-line-no">1263</span><span id="line-1263">    }</span>
-<span class="source-line-no">1264</span><span id="line-1264">    return comparator.compareTo(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength());</span>
-<span class="source-line-no">1265</span><span id="line-1265">  }</span>
-<span class="source-line-no">1266</span><span id="line-1266"></span>
-<span class="source-line-no">1267</span><span id="line-1267">  /**</span>
-<span class="source-line-no">1268</span><span id="line-1268">   * Compare cell's column family against given comparator</span>
-<span class="source-line-no">1269</span><span id="line-1269">   * @param cell       the cell to use for comparison</span>
-<span class="source-line-no">1270</span><span id="line-1270">   * @param comparator the {@link CellComparator} to use for comparison</span>
-<span class="source-line-no">1271</span><span id="line-1271">   * @return result comparing cell's column family</span>
-<span class="source-line-no">1272</span><span id="line-1272">   */</span>
-<span class="source-line-no">1273</span><span id="line-1273">  public static int compareFamily(Cell cell, ByteArrayComparable comparator) {</span>
-<span class="source-line-no">1274</span><span id="line-1274">    if (cell instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">1275</span><span id="line-1275">      return comparator.compareTo(((ByteBufferExtendedCell) cell).getFamilyByteBuffer(),</span>
-<span class="source-line-no">1276</span><span id="line-1276">        ((ByteBufferExtendedCell) cell).getFamilyPosition(), cell.getFamilyLength());</span>
-<span class="source-line-no">1277</span><span id="line-1277">    }</span>
-<span class="source-line-no">1278</span><span id="line-1278">    return comparator.compareTo(cell.getFamilyArray(), cell.getFamilyOffset(),</span>
-<span class="source-line-no">1279</span><span id="line-1279">      cell.getFamilyLength());</span>
-<span class="source-line-no">1280</span><span id="line-1280">  }</span>
-<span class="source-line-no">1281</span><span id="line-1281"></span>
-<span class="source-line-no">1282</span><span id="line-1282">  /**</span>
-<span class="source-line-no">1283</span><span id="line-1283">   * Compare cell's qualifier against given comparator</span>
-<span class="source-line-no">1284</span><span id="line-1284">   * @param cell       the cell to use for comparison</span>
-<span class="source-line-no">1285</span><span id="line-1285">   * @param comparator the {@link CellComparator} to use for comparison</span>
-<span class="source-line-no">1286</span><span id="line-1286">   * @return result comparing cell's qualifier</span>
-<span class="source-line-no">1287</span><span id="line-1287">   */</span>
-<span class="source-line-no">1288</span><span id="line-1288">  public static int compareQualifier(Cell cell, ByteArrayComparable comparator) {</span>
-<span class="source-line-no">1289</span><span id="line-1289">    if (cell instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">1290</span><span id="line-1290">      return comparator.compareTo(((ByteBufferExtendedCell) cell).getQualifierByteBuffer(),</span>
-<span class="source-line-no">1291</span><span id="line-1291">        ((ByteBufferExtendedCell) cell).getQualifierPosition(), cell.getQualifierLength());</span>
-<span class="source-line-no">1292</span><span id="line-1292">    }</span>
-<span class="source-line-no">1293</span><span id="line-1293">    return comparator.compareTo(cell.getQualifierArray(), cell.getQualifierOffset(),</span>
-<span class="source-line-no">1294</span><span id="line-1294">      cell.getQualifierLength());</span>
-<span class="source-line-no">1295</span><span id="line-1295">  }</span>
-<span class="source-line-no">1296</span><span id="line-1296"></span>
-<span class="source-line-no">1297</span><span id="line-1297">  public static Cell.Type toType(byte type) {</span>
-<span class="source-line-no">1298</span><span id="line-1298">    KeyValue.Type codeToType = KeyValue.Type.codeToType(type);</span>
-<span class="source-line-no">1299</span><span id="line-1299">    switch (codeToType) {</span>
-<span class="source-line-no">1300</span><span id="line-1300">      case Put:</span>
-<span class="source-line-no">1301</span><span id="line-1301">        return Cell.Type.Put;</span>
-<span class="source-line-no">1302</span><span id="line-1302">      case Delete:</span>
-<span class="source-line-no">1303</span><span id="line-1303">        return Cell.Type.Delete;</span>
-<span class="source-line-no">1304</span><span id="line-1304">      case DeleteColumn:</span>
-<span class="source-line-no">1305</span><span id="line-1305">        return Cell.Type.DeleteColumn;</span>
-<span class="source-line-no">1306</span><span id="line-1306">      case DeleteFamily:</span>
-<span class="source-line-no">1307</span><span id="line-1307">        return Cell.Type.DeleteFamily;</span>
-<span class="source-line-no">1308</span><span id="line-1308">      case DeleteFamilyVersion:</span>
-<span class="source-line-no">1309</span><span id="line-1309">        return Cell.Type.DeleteFamilyVersion;</span>
-<span class="source-line-no">1310</span><span id="line-1310">      default:</span>
-<span class="source-line-no">1311</span><span id="line-1311">        throw new UnsupportedOperationException("Invalid type of cell " + type);</span>
-<span class="source-line-no">1312</span><span id="line-1312">    }</span>
-<span class="source-line-no">1313</span><span id="line-1313">  }</span>
-<span class="source-line-no">1314</span><span id="line-1314"></span>
-<span class="source-line-no">1315</span><span id="line-1315">  public static KeyValue.Type toTypeByte(Cell.Type type) {</span>
-<span class="source-line-no">1316</span><span id="line-1316">    switch (type) {</span>
-<span class="source-line-no">1317</span><span id="line-1317">      case Put:</span>
-<span class="source-line-no">1318</span><span id="line-1318">        return KeyValue.Type.Put;</span>
-<span class="source-line-no">1319</span><span id="line-1319">      case Delete:</span>
-<span class="source-line-no">1320</span><span id="line-1320">        return KeyValue.Type.Delete;</span>
-<span class="source-line-no">1321</span><span id="line-1321">      case DeleteColumn:</span>
-<span class="source-line-no">1322</span><span id="line-1322">        return KeyValue.Type.DeleteColumn;</span>
-<span class="source-line-no">1323</span><span id="line-1323">      case DeleteFamilyVersion:</span>
-<span class="source-line-no">1324</span><span id="line-1324">        return KeyValue.Type.DeleteFamilyVersion;</span>
-<span class="source-line-no">1325</span><span id="line-1325">      case DeleteFamily:</span>
-<span class="source-line-no">1326</span><span id="line-1326">        return KeyValue.Type.DeleteFamily;</span>
-<span class="source-line-no">1327</span><span id="line-1327">      default:</span>
-<span class="source-line-no">1328</span><span id="line-1328">        throw new UnsupportedOperationException("Unsupported data type:" + type);</span>
-<span class="source-line-no">1329</span><span id="line-1329">    }</span>
-<span class="source-line-no">1330</span><span id="line-1330">  }</span>
-<span class="source-line-no">1331</span><span id="line-1331"></span>
-<span class="source-line-no">1332</span><span id="line-1332">  /**</span>
-<span class="source-line-no">1333</span><span id="line-1333">   * Compare cell's value against given comparator</span>
-<span class="source-line-no">1334</span><span id="line-1334">   * @param cell       the cell to use for comparison</span>
-<span class="source-line-no">1335</span><span id="line-1335">   * @param comparator the {@link CellComparator} to use for comparison</span>
-<span class="source-line-no">1336</span><span id="line-1336">   * @return result comparing cell's value</span>
-<span class="source-line-no">1337</span><span id="line-1337">   */</span>
-<span class="source-line-no">1338</span><span id="line-1338">  public static int compareValue(Cell cell, ByteArrayComparable comparator) {</span>
-<span class="source-line-no">1339</span><span id="line-1339">    if (cell instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">1340</span><span id="line-1340">      return comparator.compareTo(((ByteBufferExtendedCell) cell).getValueByteBuffer(),</span>
-<span class="source-line-no">1341</span><span id="line-1341">        ((ByteBufferExtendedCell) cell).getValuePosition(), cell.getValueLength());</span>
-<span class="source-line-no">1342</span><span id="line-1342">    }</span>
-<span class="source-line-no">1343</span><span id="line-1343">    return comparator.compareTo(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());</span>
-<span class="source-line-no">1344</span><span id="line-1344">  }</span>
-<span class="source-line-no">1345</span><span id="line-1345"></span>
-<span class="source-line-no">1346</span><span id="line-1346">  /**</span>
-<span class="source-line-no">1347</span><span id="line-1347">   * These cells are used in reseeks/seeks to improve the read performance. They are not real cells</span>
-<span class="source-line-no">1348</span><span id="line-1348">   * that are returned back to the clients</span>
-<span class="source-line-no">1349</span><span id="line-1349">   */</span>
-<span class="source-line-no">1350</span><span id="line-1350">  private static abstract class EmptyCell implements ExtendedCell {</span>
-<span class="source-line-no">1351</span><span id="line-1351"></span>
-<span class="source-line-no">1352</span><span id="line-1352">    @Override</span>
-<span class="source-line-no">1353</span><span id="line-1353">    public void setSequenceId(long seqId) {</span>
-<span class="source-line-no">1354</span><span id="line-1354">      // Fake cells don't need seqId, so leaving it as a noop.</span>
-<span class="source-line-no">1355</span><span id="line-1355">    }</span>
-<span class="source-line-no">1356</span><span id="line-1356"></span>
-<span class="source-line-no">1357</span><span id="line-1357">    @Override</span>
-<span class="source-line-no">1358</span><span id="line-1358">    public void setTimestamp(long ts) {</span>
-<span class="source-line-no">1359</span><span id="line-1359">      // Fake cells can't be changed timestamp, so leaving it as a noop.</span>
-<span class="source-line-no">1360</span><span id="line-1360">    }</span>
-<span class="source-line-no">1361</span><span id="line-1361"></span>
-<span class="source-line-no">1362</span><span id="line-1362">    @Override</span>
-<span class="source-line-no">1363</span><span id="line-1363">    public void setTimestamp(byte[] ts) {</span>
-<span class="source-line-no">1364</span><span id="line-1364">      // Fake cells can't be changed timestamp, so leaving it as a noop.</span>
-<span class="source-line-no">1365</span><span id="line-1365">    }</span>
-<span class="source-line-no">1366</span><span id="line-1366"></span>
-<span class="source-line-no">1367</span><span id="line-1367">    @Override</span>
-<span class="source-line-no">1368</span><span id="line-1368">    public byte[] getRowArray() {</span>
-<span class="source-line-no">1369</span><span id="line-1369">      return EMPTY_BYTE_ARRAY;</span>
-<span class="source-line-no">1370</span><span id="line-1370">    }</span>
-<span class="source-line-no">1371</span><span id="line-1371"></span>
-<span class="source-line-no">1372</span><span id="line-1372">    @Override</span>
-<span class="source-line-no">1373</span><span id="line-1373">    public int getRowOffset() {</span>
-<span class="source-line-no">1374</span><span id="line-1374">      return 0;</span>
-<span class="source-line-no">1375</span><span id="line-1375">    }</span>
-<span class="source-line-no">1376</span><span id="line-1376"></span>
-<span class="source-line-no">1377</span><span id="line-1377">    @Override</span>
-<span class="source-line-no">1378</span><span id="line-1378">    public short getRowLength() {</span>
-<span class="source-line-no">1379</span><span id="line-1379">      return 0;</span>
-<span class="source-line-no">1380</span><span id="line-1380">    }</span>
-<span class="source-line-no">1381</span><span id="line-1381"></span>
-<span class="source-line-no">1382</span><span id="line-1382">    @Override</span>
-<span class="source-line-no">1383</span><span id="line-1383">    public byte[] getFamilyArray() {</span>
-<span class="source-line-no">1384</span><span id="line-1384">      return EMPTY_BYTE_ARRAY;</span>
-<span class="source-line-no">1385</span><span id="line-1385">    }</span>
-<span class="source-line-no">1386</span><span id="line-1386"></span>
-<span class="source-line-no">1387</span><span id="line-1387">    @Override</span>
-<span class="source-line-no">1388</span><span id="line-1388">    public int getFamilyOffset() {</span>
-<span class="source-line-no">1389</span><span id="line-1389">      return 0;</span>
-<span class="source-line-no">1390</span><span id="line-1390">    }</span>
-<span class="source-line-no">1391</span><span id="line-1391"></span>
-<span class="source-line-no">1392</span><span id="line-1392">    @Override</span>
-<span class="source-line-no">1393</span><span id="line-1393">    public byte getFamilyLength() {</span>
-<span class="source-line-no">1394</span><span id="line-1394">      return 0;</span>
-<span class="source-line-no">1395</span><span id="line-1395">    }</span>
-<span class="source-line-no">1396</span><span id="line-1396"></span>
-<span class="source-line-no">1397</span><span id="line-1397">    @Override</span>
-<span class="source-line-no">1398</span><span id="line-1398">    public byte[] getQualifierArray() {</span>
-<span class="source-line-no">1399</span><span id="line-1399">      return EMPTY_BYTE_ARRAY;</span>
-<span class="source-line-no">1400</span><span id="line-1400">    }</span>
-<span class="source-line-no">1401</span><span id="line-1401"></span>
-<span class="source-line-no">1402</span><span id="line-1402">    @Override</span>
-<span class="source-line-no">1403</span><span id="line-1403">    public int getQualifierOffset() {</span>
-<span class="source-line-no">1404</span><span id="line-1404">      return 0;</span>
-<span class="source-line-no">1405</span><span id="line-1405">    }</span>
-<span class="source-line-no">1406</span><span id="line-1406"></span>
-<span class="source-line-no">1407</span><span id="line-1407">    @Override</span>
-<span class="source-line-no">1408</span><span id="line-1408">    public int getQualifierLength() {</span>
-<span class="source-line-no">1409</span><span id="line-1409">      return 0;</span>
-<span class="source-line-no">1410</span><span id="line-1410">    }</span>
-<span class="source-line-no">1411</span><span id="line-1411"></span>
-<span class="source-line-no">1412</span><span id="line-1412">    @Override</span>
-<span class="source-line-no">1413</span><span id="line-1413">    public long getSequenceId() {</span>
-<span class="source-line-no">1414</span><span id="line-1414">      return 0;</span>
-<span class="source-line-no">1415</span><span id="line-1415">    }</span>
-<span class="source-line-no">1416</span><span id="line-1416"></span>
-<span class="source-line-no">1417</span><span id="line-1417">    @Override</span>
-<span class="source-line-no">1418</span><span id="line-1418">    public byte[] getValueArray() {</span>
-<span class="source-line-no">1419</span><span id="line-1419">      return EMPTY_BYTE_ARRAY;</span>
-<span class="source-line-no">1420</span><span id="line-1420">    }</span>
-<span class="source-line-no">1421</span><span id="line-1421"></span>
-<span class="source-line-no">1422</span><span id="line-1422">    @Override</span>
-<span class="source-line-no">1423</span><span id="line-1423">    public int getValueOffset() {</span>
-<span class="source-line-no">1424</span><span id="line-1424">      return 0;</span>
-<span class="source-line-no">1425</span><span id="line-1425">    }</span>
-<span class="source-line-no">1426</span><span id="line-1426"></span>
-<span class="source-line-no">1427</span><span id="line-1427">    @Override</span>
-<span class="source-line-no">1428</span><span id="line-1428">    public int getValueLength() {</span>
-<span class="source-line-no">1429</span><span id="line-1429">      return 0;</span>
-<span class="source-line-no">1430</span><span id="line-1430">    }</span>
-<span class="source-line-no">1431</span><span id="line-1431"></span>
-<span class="source-line-no">1432</span><span id="line-1432">    @Override</span>
-<span class="source-line-no">1433</span><span id="line-1433">    public byte[] getTagsArray() {</span>
-<span class="source-line-no">1434</span><span id="line-1434">      return EMPTY_BYTE_ARRAY;</span>
-<span class="source-line-no">1435</span><span id="line-1435">    }</span>
-<span class="source-line-no">1436</span><span id="line-1436"></span>
-<span class="source-line-no">1437</span><span id="line-1437">    @Override</span>
-<span class="source-line-no">1438</span><span id="line-1438">    public int getTagsOffset() {</span>
-<span class="source-line-no">1439</span><span id="line-1439">      return 0;</span>
-<span class="source-line-no">1440</span><span id="line-1440">    }</span>
-<span class="source-line-no">1441</span><span id="line-1441"></span>
-<span class="source-line-no">1442</span><span id="line-1442">    @Override</span>
-<span class="source-line-no">1443</span><span id="line-1443">    public int getTagsLength() {</span>
-<span class="source-line-no">1444</span><span id="line-1444">      return 0;</span>
-<span class="source-line-no">1445</span><span id="line-1445">    }</span>
-<span class="source-line-no">1446</span><span id="line-1446">  }</span>
-<span class="source-line-no">1447</span><span id="line-1447"></span>
-<span class="source-line-no">1448</span><span id="line-1448">  /**</span>
-<span class="source-line-no">1449</span><span id="line-1449">   * These cells are used in reseeks/seeks to improve the read performance. They are not real cells</span>
-<span class="source-line-no">1450</span><span id="line-1450">   * that are returned back to the clients</span>
-<span class="source-line-no">1451</span><span id="line-1451">   */</span>
-<span class="source-line-no">1452</span><span id="line-1452">  private static abstract class EmptyByteBufferExtendedCell extends ByteBufferExtendedCell {</span>
-<span class="source-line-no">1453</span><span id="line-1453"></span>
-<span class="source-line-no">1454</span><span id="line-1454">    @Override</span>
-<span class="source-line-no">1455</span><span id="line-1455">    public void setSequenceId(long seqId) {</span>
-<span class="source-line-no">1456</span><span id="line-1456">      // Fake cells don't need seqId, so leaving it as a noop.</span>
-<span class="source-line-no">1457</span><span id="line-1457">    }</span>
-<span class="source-line-no">1458</span><span id="line-1458"></span>
-<span class="source-line-no">1459</span><span id="line-1459">    @Override</span>
-<span class="source-line-no">1460</span><span id="line-1460">    public void setTimestamp(long ts) {</span>
-<span class="source-line-no">1461</span><span id="line-1461">      // Fake cells can't be changed timestamp, so leaving it as a noop.</span>
-<span class="source-line-no">1462</span><span id="line-1462">    }</span>
-<span class="source-line-no">1463</span><span id="line-1463"></span>
-<span class="source-line-no">1464</span><span id="line-1464">    @Override</span>
-<span class="source-line-no">1465</span><span id="line-1465">    public void setTimestamp(byte[] ts) {</span>
-<span class="source-line-no">1466</span><span id="line-1466">      // Fake cells can't be changed timestamp, so leaving it as a noop.</span>
-<span class="source-line-no">1467</span><span id="line-1467">    }</span>
-<span class="source-line-no">1468</span><span id="line-1468"></span>
-<span class="source-line-no">1469</span><span id="line-1469">    @Override</span>
-<span class="source-line-no">1470</span><span id="line-1470">    public byte[] getRowArray() {</span>
-<span class="source-line-no">1471</span><span id="line-1471">      return CellUtil.cloneRow(this);</span>
-<span class="source-line-no">1472</span><span id="line-1472">    }</span>
-<span class="source-line-no">1473</span><span id="line-1473"></span>
-<span class="source-line-no">1474</span><span id="line-1474">    @Override</span>
-<span class="source-line-no">1475</span><span id="line-1475">    public int getRowOffset() {</span>
-<span class="source-line-no">1476</span><span id="line-1476">      return 0;</span>
-<span class="source-line-no">1477</span><span id="line-1477">    }</span>
-<span class="source-line-no">1478</span><span id="line-1478"></span>
-<span class="source-line-no">1479</span><span id="line-1479">    @Override</span>
-<span class="source-line-no">1480</span><span id="line-1480">    public short getRowLength() {</span>
-<span class="source-line-no">1481</span><span id="line-1481">      return 0;</span>
-<span class="source-line-no">1482</span><span id="line-1482">    }</span>
-<span class="source-line-no">1483</span><span id="line-1483"></span>
-<span class="source-line-no">1484</span><span id="line-1484">    @Override</span>
-<span class="source-line-no">1485</span><span id="line-1485">    public byte[] getFamilyArray() {</span>
-<span class="source-line-no">1486</span><span id="line-1486">      return CellUtil.cloneFamily(this);</span>
-<span class="source-line-no">1487</span><span id="line-1487">    }</span>
-<span class="source-line-no">1488</span><span id="line-1488"></span>
-<span class="source-line-no">1489</span><span id="line-1489">    @Override</span>
-<span class="source-line-no">1490</span><span id="line-1490">    public int getFamilyOffset() {</span>
-<span class="source-line-no">1491</span><span id="line-1491">      return 0;</span>
-<span class="source-line-no">1492</span><span id="line-1492">    }</span>
-<span class="source-line-no">1493</span><span id="line-1493"></span>
-<span class="source-line-no">1494</span><span id="line-1494">    @Override</span>
-<span class="source-line-no">1495</span><span id="line-1495">    public byte getFamilyLength() {</span>
-<span class="source-line-no">1496</span><span id="line-1496">      return 0;</span>
-<span class="source-line-no">1497</span><span id="line-1497">    }</span>
-<span class="source-line-no">1498</span><span id="line-1498"></span>
-<span class="source-line-no">1499</span><span id="line-1499">    @Override</span>
-<span class="source-line-no">1500</span><span id="line-1500">    public byte[] getQualifierArray() {</span>
-<span class="source-line-no">1501</span><span id="line-1501">      return CellUtil.cloneQualifier(this);</span>
-<span class="source-line-no">1502</span><span id="line-1502">    }</span>
-<span class="source-line-no">1503</span><span id="line-1503"></span>
-<span class="source-line-no">1504</span><span id="line-1504">    @Override</span>
-<span class="source-line-no">1505</span><span id="line-1505">    public int getQualifierOffset() {</span>
-<span class="source-line-no">1506</span><span id="line-1506">      return 0;</span>
-<span class="source-line-no">1507</span><span id="line-1507">    }</span>
-<span class="source-line-no">1508</span><span id="line-1508"></span>
-<span class="source-line-no">1509</span><span id="line-1509">    @Override</span>
-<span class="source-line-no">1510</span><span id="line-1510">    public int getQualifierLength() {</span>
-<span class="source-line-no">1511</span><span id="line-1511">      return 0;</span>
-<span class="source-line-no">1512</span><span id="line-1512">    }</span>
-<span class="source-line-no">1513</span><span id="line-1513"></span>
-<span class="source-line-no">1514</span><span id="line-1514">    @Override</span>
-<span class="source-line-no">1515</span><span id="line-1515">    public long getSequenceId() {</span>
-<span class="source-line-no">1516</span><span id="line-1516">      return 0;</span>
-<span class="source-line-no">1517</span><span id="line-1517">    }</span>
-<span class="source-line-no">1518</span><span id="line-1518"></span>
-<span class="source-line-no">1519</span><span id="line-1519">    @Override</span>
-<span class="source-line-no">1520</span><span id="line-1520">    public byte[] getValueArray() {</span>
-<span class="source-line-no">1521</span><span id="line-1521">      return CellUtil.cloneValue(this);</span>
-<span class="source-line-no">1522</span><span id="line-1522">    }</span>
-<span class="source-line-no">1523</span><span id="line-1523"></span>
-<span class="source-line-no">1524</span><span id="line-1524">    @Override</span>
-<span class="source-line-no">1525</span><span id="line-1525">    public int getValueOffset() {</span>
-<span class="source-line-no">1526</span><span id="line-1526">      return 0;</span>
-<span class="source-line-no">1527</span><span id="line-1527">    }</span>
-<span class="source-line-no">1528</span><span id="line-1528"></span>
-<span class="source-line-no">1529</span><span id="line-1529">    @Override</span>
-<span class="source-line-no">1530</span><span id="line-1530">    public int getValueLength() {</span>
-<span class="source-line-no">1531</span><span id="line-1531">      return 0;</span>
-<span class="source-line-no">1532</span><span id="line-1532">    }</span>
-<span class="source-line-no">1533</span><span id="line-1533"></span>
-<span class="source-line-no">1534</span><span id="line-1534">    @Override</span>
-<span class="source-line-no">1535</span><span id="line-1535">    public byte[] getTagsArray() {</span>
-<span class="source-line-no">1536</span><span id="line-1536">      return PrivateCellUtil.cloneTags(this);</span>
-<span class="source-line-no">1537</span><span id="line-1537">    }</span>
-<span class="source-line-no">1538</span><span id="line-1538"></span>
-<span class="source-line-no">1539</span><span id="line-1539">    @Override</span>
-<span class="source-line-no">1540</span><span id="line-1540">    public int getTagsOffset() {</span>
-<span class="source-line-no">1541</span><span id="line-1541">      return 0;</span>
-<span class="source-line-no">1542</span><span id="line-1542">    }</span>
-<span class="source-line-no">1543</span><span id="line-1543"></span>
-<span class="source-line-no">1544</span><span id="line-1544">    @Override</span>
-<span class="source-line-no">1545</span><span id="line-1545">    public int getTagsLength() {</span>
-<span class="source-line-no">1546</span><span id="line-1546">      return 0;</span>
-<span class="source-line-no">1547</span><span id="line-1547">    }</span>
-<span class="source-line-no">1548</span><span id="line-1548"></span>
-<span class="source-line-no">1549</span><span id="line-1549">    @Override</span>
-<span class="source-line-no">1550</span><span id="line-1550">    public ByteBuffer getRowByteBuffer() {</span>
-<span class="source-line-no">1551</span><span id="line-1551">      return HConstants.EMPTY_BYTE_BUFFER;</span>
-<span class="source-line-no">1552</span><span id="line-1552">    }</span>
-<span class="source-line-no">1553</span><span id="line-1553"></span>
-<span class="source-line-no">1554</span><span id="line-1554">    @Override</span>
-<span class="source-line-no">1555</span><span id="line-1555">    public int getRowPosition() {</span>
-<span class="source-line-no">1556</span><span id="line-1556">      return 0;</span>
-<span class="source-line-no">1557</span><span id="line-1557">    }</span>
-<span class="source-line-no">1558</span><span id="line-1558"></span>
-<span class="source-line-no">1559</span><span id="line-1559">    @Override</span>
-<span class="source-line-no">1560</span><span id="line-1560">    public ByteBuffer getFamilyByteBuffer() {</span>
-<span class="source-line-no">1561</span><span id="line-1561">      return HConstants.EMPTY_BYTE_BUFFER;</span>
-<span class="source-line-no">1562</span><span id="line-1562">    }</span>
-<span class="source-line-no">1563</span><span id="line-1563"></span>
-<span class="source-line-no">1564</span><span id="line-1564">    @Override</span>
-<span class="source-line-no">1565</span><span id="line-1565">    public int getFamilyPosition() {</span>
-<span class="source-line-no">1566</span><span id="line-1566">      return 0;</span>
-<span class="source-line-no">1567</span><span id="line-1567">    }</span>
-<span class="source-line-no">1568</span><span id="line-1568"></span>
-<span class="source-line-no">1569</span><span id="line-1569">    @Override</span>
-<span class="source-line-no">1570</span><span id="line-1570">    public ByteBuffer getQualifierByteBuffer() {</span>
-<span class="source-line-no">1571</span><span id="line-1571">      return HConstants.EMPTY_BYTE_BUFFER;</span>
-<span class="source-line-no">1572</span><span id="line-1572">    }</span>
-<span class="source-line-no">1573</span><span id="line-1573"></span>
-<span class="source-line-no">1574</span><span id="line-1574">    @Override</span>
-<span class="source-line-no">1575</span><span id="line-1575">    public int getQualifierPosition() {</span>
-<span class="source-line-no">1576</span><span id="line-1576">      return 0;</span>
-<span class="source-line-no">1577</span><span id="line-1577">    }</span>
-<span class="source-line-no">1578</span><span id="line-1578"></span>
-<span class="source-line-no">1579</span><span id="line-1579">    @Override</span>
-<span class="source-line-no">1580</span><span id="line-1580">    public ByteBuffer getTagsByteBuffer() {</span>
-<span class="source-line-no">1581</span><span id="line-1581">      return HConstants.EMPTY_BYTE_BUFFER;</span>
-<span class="source-line-no">1582</span><span id="line-1582">    }</span>
-<span class="source-line-no">1583</span><span id="line-1583"></span>
-<span class="source-line-no">1584</span><span id="line-1584">    @Override</span>
-<span class="source-line-no">1585</span><span id="line-1585">    public int getTagsPosition() {</span>
-<span class="source-line-no">1586</span><span id="line-1586">      return 0;</span>
-<span class="source-line-no">1587</span><span id="line-1587">    }</span>
-<span class="source-line-no">1588</span><span id="line-1588"></span>
-<span class="source-line-no">1589</span><span id="line-1589">    @Override</span>
-<span class="source-line-no">1590</span><span id="line-1590">    public ByteBuffer getValueByteBuffer() {</span>
-<span class="source-line-no">1591</span><span id="line-1591">      return HConstants.EMPTY_BYTE_BUFFER;</span>
-<span class="source-line-no">1592</span><span id="line-1592">    }</span>
-<span class="source-line-no">1593</span><span id="line-1593"></span>
-<span class="source-line-no">1594</span><span id="line-1594">    @Override</span>
-<span class="source-line-no">1595</span><span id="line-1595">    public int getValuePosition() {</span>
-<span class="source-line-no">1596</span><span id="line-1596">      return 0;</span>
-<span class="source-line-no">1597</span><span id="line-1597">    }</span>
-<span class="source-line-no">1598</span><span id="line-1598">  }</span>
-<span class="source-line-no">1599</span><span id="line-1599"></span>
-<span class="source-line-no">1600</span><span id="line-1600">  private static class FirstOnRowCell extends EmptyCell {</span>
-<span class="source-line-no">1601</span><span id="line-1601">    // @formatter:off</span>
-<span class="source-line-no">1602</span><span id="line-1602">    private static final int FIXED_HEAPSIZE =</span>
-<span class="source-line-no">1603</span><span id="line-1603">        ClassSize.OBJECT // object</span>
-<span class="source-line-no">1604</span><span id="line-1604">      + ClassSize.REFERENCE // row array</span>
-<span class="source-line-no">1605</span><span id="line-1605">      + Bytes.SIZEOF_INT // row offset</span>
-<span class="source-line-no">1606</span><span id="line-1606">      + Bytes.SIZEOF_SHORT;  // row length</span>
-<span class="source-line-no">1607</span><span id="line-1607">    // @formatter:on</span>
-<span class="source-line-no">1608</span><span id="line-1608">    private final byte[] rowArray;</span>
-<span class="source-line-no">1609</span><span id="line-1609">    private final int roffset;</span>
-<span class="source-line-no">1610</span><span id="line-1610">    private final short rlength;</span>
-<span class="source-line-no">1611</span><span id="line-1611"></span>
-<span class="source-line-no">1612</span><span id="line-1612">    public FirstOnRowCell(final byte[] row, int roffset, short rlength) {</span>
-<span class="source-line-no">1613</span><span id="line-1613">      this.rowArray = row;</span>
-<span class="source-line-no">1614</span><span id="line-1614">      this.roffset = roffset;</span>
-<span class="source-line-no">1615</span><span id="line-1615">      this.rlength = rlength;</span>
-<span class="source-line-no">1616</span><span id="line-1616">    }</span>
-<span class="source-line-no">1617</span><span id="line-1617"></span>
-<span class="source-line-no">1618</span><span id="line-1618">    @Override</span>
-<span class="source-line-no">1619</span><span id="line-1619">    public long heapSize() {</span>
-<span class="source-line-no">1620</span><span id="line-1620">      return ClassSize.align(FIXED_HEAPSIZE)</span>
-<span class="source-line-no">1621</span><span id="line-1621">        // array overhead</span>
-<span class="source-line-no">1622</span><span id="line-1622">        + (rlength == 0 ? ClassSize.sizeOfByteArray(rlength) : rlength);</span>
-<span class="source-line-no">1623</span><span id="line-1623">    }</span>
-<span class="source-line-no">1624</span><span id="line-1624"></span>
-<span class="source-line-no">1625</span><span id="line-1625">    @Override</span>
-<span class="source-line-no">1626</span><span id="line-1626">    public byte[] getRowArray() {</span>
-<span class="source-line-no">1627</span><span id="line-1627">      return this.rowArray;</span>
-<span class="source-line-no">1628</span><span id="line-1628">    }</span>
-<span class="source-line-no">1629</span><span id="line-1629"></span>
-<span class="source-line-no">1630</span><span id="line-1630">    @Override</span>
-<span class="source-line-no">1631</span><span id="line-1631">    public int getRowOffset() {</span>
-<span class="source-line-no">1632</span><span id="line-1632">      return this.roffset;</span>
-<span class="source-line-no">1633</span><span id="line-1633">    }</span>
-<span class="source-line-no">1634</span><span id="line-1634"></span>
-<span class="source-line-no">1635</span><span id="line-1635">    @Override</span>
-<span class="source-line-no">1636</span><span id="line-1636">    public short getRowLength() {</span>
-<span class="source-line-no">1637</span><span id="line-1637">      return this.rlength;</span>
-<span class="source-line-no">1638</span><span id="line-1638">    }</span>
-<span class="source-line-no">1639</span><span id="line-1639"></span>
-<span class="source-line-no">1640</span><span id="line-1640">    @Override</span>
-<span class="source-line-no">1641</span><span id="line-1641">    public long getTimestamp() {</span>
-<span class="source-line-no">1642</span><span id="line-1642">      return HConstants.LATEST_TIMESTAMP;</span>
-<span class="source-line-no">1643</span><span id="line-1643">    }</span>
-<span class="source-line-no">1644</span><span id="line-1644"></span>
-<span class="source-line-no">1645</span><span id="line-1645">    @Override</span>
-<span class="source-line-no">1646</span><span id="line-1646">    public byte getTypeByte() {</span>
-<span class="source-line-no">1647</span><span id="line-1647">      return KeyValue.Type.Maximum.getCode();</span>
-<span class="source-line-no">1648</span><span id="line-1648">    }</span>
-<span class="source-line-no">1649</span><span id="line-1649"></span>
-<span class="source-line-no">1650</span><span id="line-1650">    @Override</span>
-<span class="source-line-no">1651</span><span id="line-1651">    public Cell.Type getType() {</span>
-<span class="source-line-no">1652</span><span id="line-1652">      throw new UnsupportedOperationException();</span>
-<span class="source-line-no">1653</span><span id="line-1653">    }</span>
-<span class="source-line-no">1654</span><span id="line-1654">  }</span>
-<span class="source-line-no">1655</span><span id="line-1655"></span>
-<span class="source-line-no">1656</span><span id="line-1656">  private static class FirstOnRowByteBufferExtendedCell extends EmptyByteBufferExtendedCell {</span>
-<span class="source-line-no">1657</span><span id="line-1657">    // @formatter:off</span>
-<span class="source-line-no">1658</span><span id="line-1658">    private static final int FIXED_OVERHEAD =</span>
-<span class="source-line-no">1659</span><span id="line-1659">        ClassSize.OBJECT // object</span>
-<span class="source-line-no">1660</span><span id="line-1660">        + ClassSize.REFERENCE // row buffer</span>
-<span class="source-line-no">1661</span><span id="line-1661">        + Bytes.SIZEOF_INT // row offset</span>
-<span class="source-line-no">1662</span><span id="line-1662">        + Bytes.SIZEOF_SHORT; // row length</span>
-<span class="source-line-no">1663</span><span id="line-1663">    // @formatter:on</span>
-<span class="source-line-no">1664</span><span id="line-1664">    private final ByteBuffer rowBuff;</span>
-<span class="source-line-no">1665</span><span id="line-1665">    private final int roffset;</span>
-<span class="source-line-no">1666</span><span id="line-1666">    private final short rlength;</span>
-<span class="source-line-no">1667</span><span id="line-1667"></span>
-<span class="source-line-no">1668</span><span id="line-1668">    public FirstOnRowByteBufferExtendedCell(final ByteBuffer row, int roffset, short rlength) {</span>
-<span class="source-line-no">1669</span><span id="line-1669">      this.rowBuff = row;</span>
-<span class="source-line-no">1670</span><span id="line-1670">      this.roffset = roffset;</span>
-<span class="source-line-no">1671</span><span id="line-1671">      this.rlength = rlength;</span>
-<span class="source-line-no">1672</span><span id="line-1672">    }</span>
-<span class="source-line-no">1673</span><span id="line-1673"></span>
-<span class="source-line-no">1674</span><span id="line-1674">    @Override</span>
-<span class="source-line-no">1675</span><span id="line-1675">    public long heapSize() {</span>
-<span class="source-line-no">1676</span><span id="line-1676">      if (this.rowBuff.hasArray()) {</span>
-<span class="source-line-no">1677</span><span id="line-1677">        return ClassSize.align(FIXED_OVERHEAD + rlength);</span>
-<span class="source-line-no">1678</span><span id="line-1678">      }</span>
-<span class="source-line-no">1679</span><span id="line-1679">      return ClassSize.align(FIXED_OVERHEAD);</span>
-<span class="source-line-no">1680</span><span id="line-1680">    }</span>
-<span class="source-line-no">1681</span><span id="line-1681"></span>
-<span class="source-line-no">1682</span><span id="line-1682">    @Override</span>
-<span class="source-line-no">1683</span><span id="line-1683">    public ByteBuffer getRowByteBuffer() {</span>
-<span class="source-line-no">1684</span><span id="line-1684">      return this.rowBuff;</span>
-<span class="source-line-no">1685</span><span id="line-1685">    }</span>
-<span class="source-line-no">1686</span><span id="line-1686"></span>
-<span class="source-line-no">1687</span><span id="line-1687">    @Override</span>
-<span class="source-line-no">1688</span><span id="line-1688">    public int getRowPosition() {</span>
-<span class="source-line-no">1689</span><span id="line-1689">      return this.roffset;</span>
-<span class="source-line-no">1690</span><span id="line-1690">    }</span>
-<span class="source-line-no">1691</span><span id="line-1691"></span>
-<span class="source-line-no">1692</span><span id="line-1692">    @Override</span>
-<span class="source-line-no">1693</span><span id="line-1693">    public short getRowLength() {</span>
-<span class="source-line-no">1694</span><span id="line-1694">      return this.rlength;</span>
-<span class="source-line-no">1695</span><span id="line-1695">    }</span>
-<span class="source-line-no">1696</span><span id="line-1696"></span>
-<span class="source-line-no">1697</span><span id="line-1697">    @Override</span>
-<span class="source-line-no">1698</span><span id="line-1698">    public long getTimestamp() {</span>
-<span class="source-line-no">1699</span><span id="line-1699">      return HConstants.LATEST_TIMESTAMP;</span>
-<span class="source-line-no">1700</span><span id="line-1700">    }</span>
-<span class="source-line-no">1701</span><span id="line-1701"></span>
-<span class="source-line-no">1702</span><span id="line-1702">    @Override</span>
-<span class="source-line-no">1703</span><span id="line-1703">    public byte getTypeByte() {</span>
-<span class="source-line-no">1704</span><span id="line-1704">      return KeyValue.Type.Maximum.getCode();</span>
-<span class="source-line-no">1705</span><span id="line-1705">    }</span>
-<span class="source-line-no">1706</span><span id="line-1706"></span>
-<span class="source-line-no">1707</span><span id="line-1707">    @Override</span>
-<span class="source-line-no">1708</span><span id="line-1708">    public Type getType() {</span>
-<span class="source-line-no">1709</span><span id="line-1709">      throw new UnsupportedOperationException();</span>
-<span class="source-line-no">1710</span><span id="line-1710">    }</span>
-<span class="source-line-no">1711</span><span id="line-1711">  }</span>
-<span class="source-line-no">1712</span><span id="line-1712"></span>
-<span class="source-line-no">1713</span><span id="line-1713">  private static class LastOnRowByteBufferExtendedCell extends EmptyByteBufferExtendedCell {</span>
-<span class="source-line-no">1714</span><span id="line-1714">    // @formatter:off</span>
-<span class="source-line-no">1715</span><span id="line-1715">    private static final int FIXED_OVERHEAD = ClassSize.OBJECT // object</span>
-<span class="source-line-no">1716</span><span id="line-1716">      + ClassSize.REFERENCE // rowBuff</span>
-<span class="source-line-no">1717</span><span id="line-1717">      + Bytes.SIZEOF_INT // roffset</span>
-<span class="source-line-no">1718</span><span id="line-1718">      + Bytes.SIZEOF_SHORT; // rlength</span>
-<span class="source-line-no">1719</span><span id="line-1719">    // @formatter:on</span>
-<span class="source-line-no">1720</span><span id="line-1720">    private final ByteBuffer rowBuff;</span>
-<span class="source-line-no">1721</span><span id="line-1721">    private final int roffset;</span>
-<span class="source-line-no">1722</span><span id="line-1722">    private final short rlength;</span>
-<span class="source-line-no">1723</span><span id="line-1723"></span>
-<span class="source-line-no">1724</span><span id="line-1724">    public LastOnRowByteBufferExtendedCell(final ByteBuffer row, int roffset, short rlength) {</span>
-<span class="source-line-no">1725</span><span id="line-1725">      this.rowBuff = row;</span>
-<span class="source-line-no">1726</span><span id="line-1726">      this.roffset = roffset;</span>
-<span class="source-line-no">1727</span><span id="line-1727">      this.rlength = rlength;</span>
-<span class="source-line-no">1728</span><span id="line-1728">    }</span>
-<span class="source-line-no">1729</span><span id="line-1729"></span>
-<span class="source-line-no">1730</span><span id="line-1730">    @Override</span>
-<span class="source-line-no">1731</span><span id="line-1731">    public long heapSize() {</span>
-<span class="source-line-no">1732</span><span id="line-1732">      if (this.rowBuff.hasArray()) {</span>
-<span class="source-line-no">1733</span><span id="line-1733">        return ClassSize.align(FIXED_OVERHEAD + rlength);</span>
-<span class="source-line-no">1734</span><span id="line-1734">      }</span>
-<span class="source-line-no">1735</span><span id="line-1735">      return ClassSize.align(FIXED_OVERHEAD);</span>
-<span class="source-line-no">1736</span><span id="line-1736">    }</span>
-<span class="source-line-no">1737</span><span id="line-1737"></span>
-<span class="source-line-no">1738</span><span id="line-1738">    @Override</span>
-<span class="source-line-no">1739</span><span id="line-1739">    public ByteBuffer getRowByteBuffer() {</span>
-<span class="source-line-no">1740</span><span id="line-1740">      return this.rowBuff;</span>
-<span class="source-line-no">1741</span><span id="line-1741">    }</span>
-<span class="source-line-no">1742</span><span id="line-1742"></span>
-<span class="source-line-no">1743</span><span id="line-1743">    @Override</span>
-<span class="source-line-no">1744</span><span id="line-1744">    public int getRowPosition() {</span>
-<span class="source-line-no">1745</span><span id="line-1745">      return this.roffset;</span>
-<span class="source-line-no">1746</span><span id="line-1746">    }</span>
-<span class="source-line-no">1747</span><span id="line-1747"></span>
-<span class="source-line-no">1748</span><span id="line-1748">    @Override</span>
-<span class="source-line-no">1749</span><span id="line-1749">    public short getRowLength() {</span>
-<span class="source-line-no">1750</span><span id="line-1750">      return this.rlength;</span>
-<span class="source-line-no">1751</span><span id="line-1751">    }</span>
-<span class="source-line-no">1752</span><span id="line-1752"></span>
-<span class="source-line-no">1753</span><span id="line-1753">    @Override</span>
-<span class="source-line-no">1754</span><span id="line-1754">    public long getTimestamp() {</span>
-<span class="source-line-no">1755</span><span id="line-1755">      return PrivateConstants.OLDEST_TIMESTAMP;</span>
-<span class="source-line-no">1756</span><span id="line-1756">    }</span>
-<span class="source-line-no">1757</span><span id="line-1757"></span>
-<span class="source-line-no">1758</span><span id="line-1758">    @Override</span>
-<span class="source-line-no">1759</span><span id="line-1759">    public byte getTypeByte() {</span>
-<span class="source-line-no">1760</span><span id="line-1760">      return KeyValue.Type.Minimum.getCode();</span>
-<span class="source-line-no">1761</span><span id="line-1761">    }</span>
-<span class="source-line-no">1762</span><span id="line-1762"></span>
-<span class="source-line-no">1763</span><span id="line-1763">    @Override</span>
-<span class="source-line-no">1764</span><span id="line-1764">    public Type getType() {</span>
-<span class="source-line-no">1765</span><span id="line-1765">      throw new UnsupportedOperationException();</span>
-<span class="source-line-no">1766</span><span id="line-1766">    }</span>
-<span class="source-line-no">1767</span><span id="line-1767">  }</span>
-<span class="source-line-no">1768</span><span id="line-1768"></span>
-<span class="source-line-no">1769</span><span id="line-1769">  private static class FirstOnRowColByteBufferExtendedCell</span>
-<span class="source-line-no">1770</span><span id="line-1770">    extends FirstOnRowByteBufferExtendedCell {</span>
-<span class="source-line-no">1771</span><span id="line-1771">    // @formatter:off</span>
-<span class="source-line-no">1772</span><span id="line-1772">    private static final int FIXED_OVERHEAD = FirstOnRowByteBufferExtendedCell.FIXED_OVERHEAD</span>
-<span class="source-line-no">1773</span><span id="line-1773">      + ClassSize.REFERENCE * 2 // family buffer and column buffer</span>
-<span class="source-line-no">1774</span><span id="line-1774">      + Bytes.SIZEOF_INT * 3 // famOffset, colOffset, colLength</span>
-<span class="source-line-no">1775</span><span id="line-1775">      + Bytes.SIZEOF_BYTE; // famLength</span>
-<span class="source-line-no">1776</span><span id="line-1776">    // @formatter:on</span>
-<span class="source-line-no">1777</span><span id="line-1777">    private final ByteBuffer famBuff;</span>
-<span class="source-line-no">1778</span><span id="line-1778">    private final int famOffset;</span>
-<span class="source-line-no">1779</span><span id="line-1779">    private final byte famLength;</span>
-<span class="source-line-no">1780</span><span id="line-1780">    private final ByteBuffer colBuff;</span>
-<span class="source-line-no">1781</span><span id="line-1781">    private final int colOffset;</span>
-<span class="source-line-no">1782</span><span id="line-1782">    private final int colLength;</span>
-<span class="source-line-no">1783</span><span id="line-1783"></span>
-<span class="source-line-no">1784</span><span id="line-1784">    public FirstOnRowColByteBufferExtendedCell(final ByteBuffer row, int roffset, short rlength,</span>
-<span class="source-line-no">1785</span><span id="line-1785">      final ByteBuffer famBuff, final int famOffset, final byte famLength, final ByteBuffer col,</span>
-<span class="source-line-no">1786</span><span id="line-1786">      final int colOffset, final int colLength) {</span>
-<span class="source-line-no">1787</span><span id="line-1787">      super(row, roffset, rlength);</span>
-<span class="source-line-no">1788</span><span id="line-1788">      this.famBuff = famBuff;</span>
-<span class="source-line-no">1789</span><span id="line-1789">      this.famOffset = famOffset;</span>
-<span class="source-line-no">1790</span><span id="line-1790">      this.famLength = famLength;</span>
-<span class="source-line-no">1791</span><span id="line-1791">      this.colBuff = col;</span>
-<span class="source-line-no">1792</span><span id="line-1792">      this.colOffset = colOffset;</span>
-<span class="source-line-no">1793</span><span id="line-1793">      this.colLength = colLength;</span>
-<span class="source-line-no">1794</span><span id="line-1794">    }</span>
-<span class="source-line-no">1795</span><span id="line-1795"></span>
-<span class="source-line-no">1796</span><span id="line-1796">    @Override</span>
-<span class="source-line-no">1797</span><span id="line-1797">    public long heapSize() {</span>
-<span class="source-line-no">1798</span><span id="line-1798">      if (famBuff.hasArray() &amp;&amp; colBuff.hasArray()) {</span>
-<span class="source-line-no">1799</span><span id="line-1799">        return ClassSize.align(FIXED_OVERHEAD + famLength + colLength);</span>
-<span class="source-line-no">1800</span><span id="line-1800">      } else if (famBuff.hasArray()) {</span>
-<span class="source-line-no">1801</span><span id="line-1801">        return ClassSize.align(FIXED_OVERHEAD + famLength);</span>
-<span class="source-line-no">1802</span><span id="line-1802">      } else if (colBuff.hasArray()) {</span>
-<span class="source-line-no">1803</span><span id="line-1803">        return ClassSize.align(FIXED_OVERHEAD + colLength);</span>
-<span class="source-line-no">1804</span><span id="line-1804">      } else {</span>
-<span class="source-line-no">1805</span><span id="line-1805">        return ClassSize.align(FIXED_OVERHEAD);</span>
-<span class="source-line-no">1806</span><span id="line-1806">      }</span>
-<span class="source-line-no">1807</span><span id="line-1807">    }</span>
-<span class="source-line-no">1808</span><span id="line-1808"></span>
-<span class="source-line-no">1809</span><span id="line-1809">    @Override</span>
-<span class="source-line-no">1810</span><span id="line-1810">    public ByteBuffer getFamilyByteBuffer() {</span>
-<span class="source-line-no">1811</span><span id="line-1811">      return this.famBuff;</span>
-<span class="source-line-no">1812</span><span id="line-1812">    }</span>
-<span class="source-line-no">1813</span><span id="line-1813"></span>
-<span class="source-line-no">1814</span><span id="line-1814">    @Override</span>
-<span class="source-line-no">1815</span><span id="line-1815">    public int getFamilyPosition() {</span>
-<span class="source-line-no">1816</span><span id="line-1816">      return this.famOffset;</span>
-<span class="source-line-no">1817</span><span id="line-1817">    }</span>
-<span class="source-line-no">1818</span><span id="line-1818"></span>
-<span class="source-line-no">1819</span><span id="line-1819">    @Override</span>
-<span class="source-line-no">1820</span><span id="line-1820">    public byte getFamilyLength() {</span>
-<span class="source-line-no">1821</span><span id="line-1821">      return famLength;</span>
-<span class="source-line-no">1822</span><span id="line-1822">    }</span>
-<span class="source-line-no">1823</span><span id="line-1823"></span>
-<span class="source-line-no">1824</span><span id="line-1824">    @Override</span>
-<span class="source-line-no">1825</span><span id="line-1825">    public ByteBuffer getQualifierByteBuffer() {</span>
-<span class="source-line-no">1826</span><span id="line-1826">      return this.colBuff;</span>
-<span class="source-line-no">1827</span><span id="line-1827">    }</span>
-<span class="source-line-no">1828</span><span id="line-1828"></span>
-<span class="source-line-no">1829</span><span id="line-1829">    @Override</span>
-<span class="source-line-no">1830</span><span id="line-1830">    public int getQualifierPosition() {</span>
-<span class="source-line-no">1831</span><span id="line-1831">      return this.colOffset;</span>
-<span class="source-line-no">1832</span><span id="line-1832">    }</span>
-<span class="source-line-no">1833</span><span id="line-1833"></span>
-<span class="source-line-no">1834</span><span id="line-1834">    @Override</span>
-<span class="source-line-no">1835</span><span id="line-1835">    public int getQualifierLength() {</span>
-<span class="source-line-no">1836</span><span id="line-1836">      return this.colLength;</span>
-<span class="source-line-no">1837</span><span id="line-1837">    }</span>
-<span class="source-line-no">1838</span><span id="line-1838">  }</span>
-<span class="source-line-no">1839</span><span id="line-1839"></span>
-<span class="source-line-no">1840</span><span id="line-1840">  private static class FirstOnRowColCell extends FirstOnRowCell {</span>
-<span class="source-line-no">1841</span><span id="line-1841">    // @formatter:off</span>
-<span class="source-line-no">1842</span><span id="line-1842">    private static final long FIXED_HEAPSIZE = (long) FirstOnRowCell.FIXED_HEAPSIZE</span>
-<span class="source-line-no">1843</span><span id="line-1843">      + Bytes.SIZEOF_BYTE // flength</span>
-<span class="source-line-no">1844</span><span id="line-1844">      + Bytes.SIZEOF_INT * 3 // foffset, qoffset, qlength</span>
-<span class="source-line-no">1845</span><span id="line-1845">      + ClassSize.REFERENCE * 2; // fArray, qArray</span>
-<span class="source-line-no">1846</span><span id="line-1846">    // @formatter:on</span>
-<span class="source-line-no">1847</span><span id="line-1847">    private final byte[] fArray;</span>
-<span class="source-line-no">1848</span><span id="line-1848">    private final int foffset;</span>
-<span class="source-line-no">1849</span><span id="line-1849">    private final byte flength;</span>
-<span class="source-line-no">1850</span><span id="line-1850">    private final byte[] qArray;</span>
-<span class="source-line-no">1851</span><span id="line-1851">    private final int qoffset;</span>
-<span class="source-line-no">1852</span><span id="line-1852">    private final int qlength;</span>
-<span class="source-line-no">1853</span><span id="line-1853"></span>
-<span class="source-line-no">1854</span><span id="line-1854">    public FirstOnRowColCell(byte[] rArray, int roffset, short rlength, byte[] fArray, int foffset,</span>
-<span class="source-line-no">1855</span><span id="line-1855">      byte flength, byte[] qArray, int qoffset, int qlength) {</span>
-<span class="source-line-no">1856</span><span id="line-1856">      super(rArray, roffset, rlength);</span>
-<span class="source-line-no">1857</span><span id="line-1857">      this.fArray = fArray;</span>
-<span class="source-line-no">1858</span><span id="line-1858">      this.foffset = foffset;</span>
-<span class="source-line-no">1859</span><span id="line-1859">      this.flength = flength;</span>
-<span class="source-line-no">1860</span><span id="line-1860">      this.qArray = qArray;</span>
-<span class="source-line-no">1861</span><span id="line-1861">      this.qoffset = qoffset;</span>
-<span class="source-line-no">1862</span><span id="line-1862">      this.qlength = qlength;</span>
-<span class="source-line-no">1863</span><span id="line-1863">    }</span>
-<span class="source-line-no">1864</span><span id="line-1864"></span>
-<span class="source-line-no">1865</span><span id="line-1865">    @Override</span>
-<span class="source-line-no">1866</span><span id="line-1866">    public long heapSize() {</span>
-<span class="source-line-no">1867</span><span id="line-1867">      return ClassSize.align(FIXED_HEAPSIZE)</span>
-<span class="source-line-no">1868</span><span id="line-1868">        // array overhead</span>
-<span class="source-line-no">1869</span><span id="line-1869">        + (flength == 0 ? ClassSize.sizeOfByteArray(flength) : flength)</span>
-<span class="source-line-no">1870</span><span id="line-1870">        + (qlength == 0 ? ClassSize.sizeOfByteArray(qlength) : qlength);</span>
-<span class="source-line-no">1871</span><span id="line-1871">    }</span>
-<span class="source-line-no">1872</span><span id="line-1872"></span>
-<span class="source-line-no">1873</span><span id="line-1873">    @Override</span>
-<span class="source-line-no">1874</span><span id="line-1874">    public byte[] getFamilyArray() {</span>
-<span class="source-line-no">1875</span><span id="line-1875">      return this.fArray;</span>
-<span class="source-line-no">1876</span><span id="line-1876">    }</span>
-<span class="source-line-no">1877</span><span id="line-1877"></span>
-<span class="source-line-no">1878</span><span id="line-1878">    @Override</span>
-<span class="source-line-no">1879</span><span id="line-1879">    public int getFamilyOffset() {</span>
-<span class="source-line-no">1880</span><span id="line-1880">      return this.foffset;</span>
-<span class="source-line-no">1881</span><span id="line-1881">    }</span>
-<span class="source-line-no">1882</span><span id="line-1882"></span>
-<span class="source-line-no">1883</span><span id="line-1883">    @Override</span>
-<span class="source-line-no">1884</span><span id="line-1884">    public byte getFamilyLength() {</span>
-<span class="source-line-no">1885</span><span id="line-1885">      return this.flength;</span>
-<span class="source-line-no">1886</span><span id="line-1886">    }</span>
-<span class="source-line-no">1887</span><span id="line-1887"></span>
-<span class="source-line-no">1888</span><span id="line-1888">    @Override</span>
-<span class="source-line-no">1889</span><span id="line-1889">    public byte[] getQualifierArray() {</span>
-<span class="source-line-no">1890</span><span id="line-1890">      return this.qArray;</span>
-<span class="source-line-no">1891</span><span id="line-1891">    }</span>
-<span class="source-line-no">1892</span><span id="line-1892"></span>
-<span class="source-line-no">1893</span><span id="line-1893">    @Override</span>
-<span class="source-line-no">1894</span><span id="line-1894">    public int getQualifierOffset() {</span>
-<span class="source-line-no">1895</span><span id="line-1895">      return this.qoffset;</span>
-<span class="source-line-no">1896</span><span id="line-1896">    }</span>
-<span class="source-line-no">1897</span><span id="line-1897"></span>
-<span class="source-line-no">1898</span><span id="line-1898">    @Override</span>
-<span class="source-line-no">1899</span><span id="line-1899">    public int getQualifierLength() {</span>
-<span class="source-line-no">1900</span><span id="line-1900">      return this.qlength;</span>
-<span class="source-line-no">1901</span><span id="line-1901">    }</span>
-<span class="source-line-no">1902</span><span id="line-1902">  }</span>
-<span class="source-line-no">1903</span><span id="line-1903"></span>
-<span class="source-line-no">1904</span><span id="line-1904">  private static class FirstOnRowColTSCell extends FirstOnRowColCell {</span>
-<span class="source-line-no">1905</span><span id="line-1905">    // @formatter:off</span>
-<span class="source-line-no">1906</span><span id="line-1906">    private static final long FIXED_HEAPSIZE = FirstOnRowColCell.FIXED_HEAPSIZE</span>
-<span class="source-line-no">1907</span><span id="line-1907">      + Bytes.SIZEOF_LONG; // ts</span>
-<span class="source-line-no">1908</span><span id="line-1908">    private long ts;</span>
-<span class="source-line-no">1909</span><span id="line-1909">    // @formatter:on</span>
-<span class="source-line-no">1910</span><span id="line-1910"></span>
-<span class="source-line-no">1911</span><span id="line-1911">    public FirstOnRowColTSCell(byte[] rArray, int roffset, short rlength, byte[] fArray,</span>
-<span class="source-line-no">1912</span><span id="line-1912">      int foffset, byte flength, byte[] qArray, int qoffset, int qlength, long ts) {</span>
-<span class="source-line-no">1913</span><span id="line-1913">      super(rArray, roffset, rlength, fArray, foffset, flength, qArray, qoffset, qlength);</span>
-<span class="source-line-no">1914</span><span id="line-1914">      this.ts = ts;</span>
-<span class="source-line-no">1915</span><span id="line-1915">    }</span>
-<span class="source-line-no">1916</span><span id="line-1916"></span>
-<span class="source-line-no">1917</span><span id="line-1917">    @Override</span>
-<span class="source-line-no">1918</span><span id="line-1918">    public long getTimestamp() {</span>
-<span class="source-line-no">1919</span><span id="line-1919">      return this.ts;</span>
-<span class="source-line-no">1920</span><span id="line-1920">    }</span>
-<span class="source-line-no">1921</span><span id="line-1921"></span>
-<span class="source-line-no">1922</span><span id="line-1922">    @Override</span>
-<span class="source-line-no">1923</span><span id="line-1923">    public long heapSize() {</span>
-<span class="source-line-no">1924</span><span id="line-1924">      return ClassSize.align(FIXED_HEAPSIZE);</span>
-<span class="source-line-no">1925</span><span id="line-1925">    }</span>
-<span class="source-line-no">1926</span><span id="line-1926">  }</span>
-<span class="source-line-no">1927</span><span id="line-1927"></span>
-<span class="source-line-no">1928</span><span id="line-1928">  private static class FirstOnRowColTSByteBufferExtendedCell</span>
-<span class="source-line-no">1929</span><span id="line-1929">    extends FirstOnRowColByteBufferExtendedCell {</span>
-<span class="source-line-no">1930</span><span id="line-1930">    // @formatter:off</span>
-<span class="source-line-no">1931</span><span id="line-1931">    private static final int FIXED_OVERHEAD = FirstOnRowColByteBufferExtendedCell.FIXED_OVERHEAD</span>
-<span class="source-line-no">1932</span><span id="line-1932">      + Bytes.SIZEOF_LONG; // ts</span>
-<span class="source-line-no">1933</span><span id="line-1933">    private long ts;</span>
-<span class="source-line-no">1934</span><span id="line-1934">    // @formatter:on</span>
-<span class="source-line-no">1935</span><span id="line-1935"></span>
-<span class="source-line-no">1936</span><span id="line-1936">    public FirstOnRowColTSByteBufferExtendedCell(ByteBuffer rBuffer, int roffset, short rlength,</span>
-<span class="source-line-no">1937</span><span id="line-1937">      ByteBuffer fBuffer, int foffset, byte flength, ByteBuffer qBuffer, int qoffset, int qlength,</span>
-<span class="source-line-no">1938</span><span id="line-1938">      long ts) {</span>
-<span class="source-line-no">1939</span><span id="line-1939">      super(rBuffer, roffset, rlength, fBuffer, foffset, flength, qBuffer, qoffset, qlength);</span>
-<span class="source-line-no">1940</span><span id="line-1940">      this.ts = ts;</span>
-<span class="source-line-no">1941</span><span id="line-1941">    }</span>
-<span class="source-line-no">1942</span><span id="line-1942"></span>
-<span class="source-line-no">1943</span><span id="line-1943">    @Override</span>
-<span class="source-line-no">1944</span><span id="line-1944">    public long getTimestamp() {</span>
-<span class="source-line-no">1945</span><span id="line-1945">      return this.ts;</span>
-<span class="source-line-no">1946</span><span id="line-1946">    }</span>
-<span class="source-line-no">1947</span><span id="line-1947"></span>
-<span class="source-line-no">1948</span><span id="line-1948">    @Override</span>
-<span class="source-line-no">1949</span><span id="line-1949">    public long heapSize() {</span>
-<span class="source-line-no">1950</span><span id="line-1950">      return ClassSize.align(FIXED_OVERHEAD + super.heapSize());</span>
-<span class="source-line-no">1951</span><span id="line-1951">    }</span>
-<span class="source-line-no">1952</span><span id="line-1952">  }</span>
-<span class="source-line-no">1953</span><span id="line-1953"></span>
-<span class="source-line-no">1954</span><span id="line-1954">  private static class LastOnRowCell extends EmptyCell {</span>
-<span class="source-line-no">1955</span><span id="line-1955">    // @formatter:off</span>
-<span class="source-line-no">1956</span><span id="line-1956">    private static final int FIXED_OVERHEAD = ClassSize.OBJECT // object</span>
-<span class="source-line-no">1957</span><span id="line-1957">      + ClassSize.REFERENCE // row array</span>
-<span class="source-line-no">1958</span><span id="line-1958">      + Bytes.SIZEOF_INT // row offset</span>
-<span class="source-line-no">1959</span><span id="line-1959">      + Bytes.SIZEOF_SHORT; // row length</span>
-<span class="source-line-no">1960</span><span id="line-1960">    // @formatter:on</span>
-<span class="source-line-no">1961</span><span id="line-1961">    private final byte[] rowArray;</span>
-<span class="source-line-no">1962</span><span id="line-1962">    private final int roffset;</span>
-<span class="source-line-no">1963</span><span id="line-1963">    private final short rlength;</span>
-<span class="source-line-no">1964</span><span id="line-1964"></span>
-<span class="source-line-no">1965</span><span id="line-1965">    public LastOnRowCell(byte[] row, int roffset, short rlength) {</span>
-<span class="source-line-no">1966</span><span id="line-1966">      this.rowArray = row;</span>
-<span class="source-line-no">1967</span><span id="line-1967">      this.roffset = roffset;</span>
-<span class="source-line-no">1968</span><span id="line-1968">      this.rlength = rlength;</span>
-<span class="source-line-no">1969</span><span id="line-1969">    }</span>
-<span class="source-line-no">1970</span><span id="line-1970"></span>
-<span class="source-line-no">1971</span><span id="line-1971">    @Override</span>
-<span class="source-line-no">1972</span><span id="line-1972">    public long heapSize() {</span>
-<span class="source-line-no">1973</span><span id="line-1973">      return ClassSize.align(FIXED_OVERHEAD)</span>
-<span class="source-line-no">1974</span><span id="line-1974">        // array overhead</span>
-<span class="source-line-no">1975</span><span id="line-1975">        + (rlength == 0 ? ClassSize.sizeOfByteArray(rlength) : rlength);</span>
-<span class="source-line-no">1976</span><span id="line-1976">    }</span>
-<span class="source-line-no">1977</span><span id="line-1977"></span>
-<span class="source-line-no">1978</span><span id="line-1978">    @Override</span>
-<span class="source-line-no">1979</span><span id="line-1979">    public byte[] getRowArray() {</span>
-<span class="source-line-no">1980</span><span id="line-1980">      return this.rowArray;</span>
-<span class="source-line-no">1981</span><span id="line-1981">    }</span>
-<span class="source-line-no">1982</span><span id="line-1982"></span>
-<span class="source-line-no">1983</span><span id="line-1983">    @Override</span>
-<span class="source-line-no">1984</span><span id="line-1984">    public int getRowOffset() {</span>
-<span class="source-line-no">1985</span><span id="line-1985">      return this.roffset;</span>
-<span class="source-line-no">1986</span><span id="line-1986">    }</span>
-<span class="source-line-no">1987</span><span id="line-1987"></span>
-<span class="source-line-no">1988</span><span id="line-1988">    @Override</span>
-<span class="source-line-no">1989</span><span id="line-1989">    public short getRowLength() {</span>
-<span class="source-line-no">1990</span><span id="line-1990">      return this.rlength;</span>
-<span class="source-line-no">1991</span><span id="line-1991">    }</span>
-<span class="source-line-no">1992</span><span id="line-1992"></span>
-<span class="source-line-no">1993</span><span id="line-1993">    @Override</span>
-<span class="source-line-no">1994</span><span id="line-1994">    public long getTimestamp() {</span>
-<span class="source-line-no">1995</span><span id="line-1995">      return PrivateConstants.OLDEST_TIMESTAMP;</span>
-<span class="source-line-no">1996</span><span id="line-1996">    }</span>
-<span class="source-line-no">1997</span><span id="line-1997"></span>
-<span class="source-line-no">1998</span><span id="line-1998">    @Override</span>
-<span class="source-line-no">1999</span><span id="line-1999">    public byte getTypeByte() {</span>
-<span class="source-line-no">2000</span><span id="line-2000">      return KeyValue.Type.Minimum.getCode();</span>
-<span class="source-line-no">2001</span><span id="line-2001">    }</span>
-<span class="source-line-no">2002</span><span id="line-2002"></span>
-<span class="source-line-no">2003</span><span id="line-2003">    @Override</span>
-<span class="source-line-no">2004</span><span id="line-2004">    public Type getType() {</span>
-<span class="source-line-no">2005</span><span id="line-2005">      throw new UnsupportedOperationException();</span>
-<span class="source-line-no">2006</span><span id="line-2006">    }</span>
-<span class="source-line-no">2007</span><span id="line-2007">  }</span>
-<span class="source-line-no">2008</span><span id="line-2008"></span>
-<span class="source-line-no">2009</span><span id="line-2009">  private static class LastOnRowColCell extends LastOnRowCell {</span>
-<span class="source-line-no">2010</span><span id="line-2010">    // @formatter:off</span>
-<span class="source-line-no">2011</span><span id="line-2011">    private static final long FIXED_OVERHEAD = (long) LastOnRowCell.FIXED_OVERHEAD</span>
-<span class="source-line-no">2012</span><span id="line-2012">      + ClassSize.REFERENCE * 2 // fArray and qArray</span>
-<span class="source-line-no">2013</span><span id="line-2013">      + Bytes.SIZEOF_INT * 3 // foffset, qoffset, qlength</span>
-<span class="source-line-no">2014</span><span id="line-2014">      + Bytes.SIZEOF_BYTE; // flength</span>
-<span class="source-line-no">2015</span><span id="line-2015">    // @formatter:on</span>
-<span class="source-line-no">2016</span><span id="line-2016">    private final byte[] fArray;</span>
-<span class="source-line-no">2017</span><span id="line-2017">    private final int foffset;</span>
-<span class="source-line-no">2018</span><span id="line-2018">    private final byte flength;</span>
-<span class="source-line-no">2019</span><span id="line-2019">    private final byte[] qArray;</span>
-<span class="source-line-no">2020</span><span id="line-2020">    private final int qoffset;</span>
-<span class="source-line-no">2021</span><span id="line-2021">    private final int qlength;</span>
-<span class="source-line-no">2022</span><span id="line-2022"></span>
-<span class="source-line-no">2023</span><span id="line-2023">    public LastOnRowColCell(byte[] rArray, int roffset, short rlength, byte[] fArray, int foffset,</span>
-<span class="source-line-no">2024</span><span id="line-2024">      byte flength, byte[] qArray, int qoffset, int qlength) {</span>
-<span class="source-line-no">2025</span><span id="line-2025">      super(rArray, roffset, rlength);</span>
-<span class="source-line-no">2026</span><span id="line-2026">      this.fArray = fArray;</span>
-<span class="source-line-no">2027</span><span id="line-2027">      this.foffset = foffset;</span>
-<span class="source-line-no">2028</span><span id="line-2028">      this.flength = flength;</span>
-<span class="source-line-no">2029</span><span id="line-2029">      this.qArray = qArray;</span>
-<span class="source-line-no">2030</span><span id="line-2030">      this.qoffset = qoffset;</span>
-<span class="source-line-no">2031</span><span id="line-2031">      this.qlength = qlength;</span>
-<span class="source-line-no">2032</span><span id="line-2032">    }</span>
-<span class="source-line-no">2033</span><span id="line-2033"></span>
-<span class="source-line-no">2034</span><span id="line-2034">    @Override</span>
-<span class="source-line-no">2035</span><span id="line-2035">    public long heapSize() {</span>
-<span class="source-line-no">2036</span><span id="line-2036">      return ClassSize.align(FIXED_OVERHEAD)</span>
-<span class="source-line-no">2037</span><span id="line-2037">        // array overhead</span>
-<span class="source-line-no">2038</span><span id="line-2038">        + (flength == 0 ? ClassSize.sizeOfByteArray(flength) : flength)</span>
-<span class="source-line-no">2039</span><span id="line-2039">        + (qlength == 0 ? ClassSize.sizeOfByteArray(qlength) : qlength);</span>
-<span class="source-line-no">2040</span><span id="line-2040">    }</span>
-<span class="source-line-no">2041</span><span id="line-2041"></span>
-<span class="source-line-no">2042</span><span id="line-2042">    @Override</span>
-<span class="source-line-no">2043</span><span id="line-2043">    public byte[] getFamilyArray() {</span>
-<span class="source-line-no">2044</span><span id="line-2044">      return this.fArray;</span>
-<span class="source-line-no">2045</span><span id="line-2045">    }</span>
-<span class="source-line-no">2046</span><span id="line-2046"></span>
-<span class="source-line-no">2047</span><span id="line-2047">    @Override</span>
-<span class="source-line-no">2048</span><span id="line-2048">    public int getFamilyOffset() {</span>
-<span class="source-line-no">2049</span><span id="line-2049">      return this.foffset;</span>
-<span class="source-line-no">2050</span><span id="line-2050">    }</span>
-<span class="source-line-no">2051</span><span id="line-2051"></span>
-<span class="source-line-no">2052</span><span id="line-2052">    @Override</span>
-<span class="source-line-no">2053</span><span id="line-2053">    public byte getFamilyLength() {</span>
-<span class="source-line-no">2054</span><span id="line-2054">      return this.flength;</span>
-<span class="source-line-no">2055</span><span id="line-2055">    }</span>
-<span class="source-line-no">2056</span><span id="line-2056"></span>
-<span class="source-line-no">2057</span><span id="line-2057">    @Override</span>
-<span class="source-line-no">2058</span><span id="line-2058">    public byte[] getQualifierArray() {</span>
-<span class="source-line-no">2059</span><span id="line-2059">      return this.qArray;</span>
-<span class="source-line-no">2060</span><span id="line-2060">    }</span>
-<span class="source-line-no">2061</span><span id="line-2061"></span>
-<span class="source-line-no">2062</span><span id="line-2062">    @Override</span>
-<span class="source-line-no">2063</span><span id="line-2063">    public int getQualifierOffset() {</span>
-<span class="source-line-no">2064</span><span id="line-2064">      return this.qoffset;</span>
-<span class="source-line-no">2065</span><span id="line-2065">    }</span>
-<span class="source-line-no">2066</span><span id="line-2066"></span>
-<span class="source-line-no">2067</span><span id="line-2067">    @Override</span>
-<span class="source-line-no">2068</span><span id="line-2068">    public int getQualifierLength() {</span>
-<span class="source-line-no">2069</span><span id="line-2069">      return this.qlength;</span>
-<span class="source-line-no">2070</span><span id="line-2070">    }</span>
-<span class="source-line-no">2071</span><span id="line-2071">  }</span>
-<span class="source-line-no">2072</span><span id="line-2072"></span>
-<span class="source-line-no">2073</span><span id="line-2073">  private static class LastOnRowColByteBufferExtendedCell extends LastOnRowByteBufferExtendedCell {</span>
-<span class="source-line-no">2074</span><span id="line-2074">    // @formatter:off</span>
-<span class="source-line-no">2075</span><span id="line-2075">    private static final int FIXED_OVERHEAD = LastOnRowByteBufferExtendedCell.FIXED_OVERHEAD</span>
-<span class="source-line-no">2076</span><span id="line-2076">      + ClassSize.REFERENCE * 2 // fBuffer and qBuffer</span>
-<span class="source-line-no">2077</span><span id="line-2077">      + Bytes.SIZEOF_INT * 3 // foffset, qoffset, qlength</span>
-<span class="source-line-no">2078</span><span id="line-2078">      + Bytes.SIZEOF_BYTE; // flength</span>
-<span class="source-line-no">2079</span><span id="line-2079">    // @formatter:on</span>
-<span class="source-line-no">2080</span><span id="line-2080">    private final ByteBuffer fBuffer;</span>
-<span class="source-line-no">2081</span><span id="line-2081">    private final int foffset;</span>
-<span class="source-line-no">2082</span><span id="line-2082">    private final byte flength;</span>
-<span class="source-line-no">2083</span><span id="line-2083">    private final ByteBuffer qBuffer;</span>
-<span class="source-line-no">2084</span><span id="line-2084">    private final int qoffset;</span>
-<span class="source-line-no">2085</span><span id="line-2085">    private final int qlength;</span>
-<span class="source-line-no">2086</span><span id="line-2086"></span>
-<span class="source-line-no">2087</span><span id="line-2087">    public LastOnRowColByteBufferExtendedCell(ByteBuffer rBuffer, int roffset, short rlength,</span>
-<span class="source-line-no">2088</span><span id="line-2088">      ByteBuffer fBuffer, int foffset, byte flength, ByteBuffer qBuffer, int qoffset, int qlength) {</span>
-<span class="source-line-no">2089</span><span id="line-2089">      super(rBuffer, roffset, rlength);</span>
-<span class="source-line-no">2090</span><span id="line-2090">      this.fBuffer = fBuffer;</span>
-<span class="source-line-no">2091</span><span id="line-2091">      this.foffset = foffset;</span>
-<span class="source-line-no">2092</span><span id="line-2092">      this.flength = flength;</span>
-<span class="source-line-no">2093</span><span id="line-2093">      this.qBuffer = qBuffer;</span>
-<span class="source-line-no">2094</span><span id="line-2094">      this.qoffset = qoffset;</span>
-<span class="source-line-no">2095</span><span id="line-2095">      this.qlength = qlength;</span>
-<span class="source-line-no">2096</span><span id="line-2096">    }</span>
-<span class="source-line-no">2097</span><span id="line-2097"></span>
-<span class="source-line-no">2098</span><span id="line-2098">    @Override</span>
-<span class="source-line-no">2099</span><span id="line-2099">    public long heapSize() {</span>
-<span class="source-line-no">2100</span><span id="line-2100">      if (fBuffer.hasArray() &amp;&amp; qBuffer.hasArray()) {</span>
-<span class="source-line-no">2101</span><span id="line-2101">        return ClassSize.align(FIXED_OVERHEAD + flength + qlength);</span>
-<span class="source-line-no">2102</span><span id="line-2102">      } else if (fBuffer.hasArray()) {</span>
-<span class="source-line-no">2103</span><span id="line-2103">        return ClassSize.align(FIXED_OVERHEAD + flength);</span>
-<span class="source-line-no">2104</span><span id="line-2104">      } else if (qBuffer.hasArray()) {</span>
-<span class="source-line-no">2105</span><span id="line-2105">        return ClassSize.align(FIXED_OVERHEAD + qlength);</span>
-<span class="source-line-no">2106</span><span id="line-2106">      } else {</span>
-<span class="source-line-no">2107</span><span id="line-2107">        return ClassSize.align(FIXED_OVERHEAD);</span>
-<span class="source-line-no">2108</span><span id="line-2108">      }</span>
-<span class="source-line-no">2109</span><span id="line-2109">    }</span>
-<span class="source-line-no">2110</span><span id="line-2110"></span>
-<span class="source-line-no">2111</span><span id="line-2111">    @Override</span>
-<span class="source-line-no">2112</span><span id="line-2112">    public ByteBuffer getFamilyByteBuffer() {</span>
-<span class="source-line-no">2113</span><span id="line-2113">      return this.fBuffer;</span>
-<span class="source-line-no">2114</span><span id="line-2114">    }</span>
-<span class="source-line-no">2115</span><span id="line-2115"></span>
-<span class="source-line-no">2116</span><span id="line-2116">    @Override</span>
-<span class="source-line-no">2117</span><span id="line-2117">    public int getFamilyPosition() {</span>
-<span class="source-line-no">2118</span><span id="line-2118">      return this.foffset;</span>
-<span class="source-line-no">2119</span><span id="line-2119">    }</span>
-<span class="source-line-no">2120</span><span id="line-2120"></span>
-<span class="source-line-no">2121</span><span id="line-2121">    @Override</span>
-<span class="source-line-no">2122</span><span id="line-2122">    public byte getFamilyLength() {</span>
-<span class="source-line-no">2123</span><span id="line-2123">      return this.flength;</span>
-<span class="source-line-no">2124</span><span id="line-2124">    }</span>
-<span class="source-line-no">2125</span><span id="line-2125"></span>
-<span class="source-line-no">2126</span><span id="line-2126">    @Override</span>
-<span class="source-line-no">2127</span><span id="line-2127">    public ByteBuffer getQualifierByteBuffer() {</span>
-<span class="source-line-no">2128</span><span id="line-2128">      return this.qBuffer;</span>
-<span class="source-line-no">2129</span><span id="line-2129">    }</span>
-<span class="source-line-no">2130</span><span id="line-2130"></span>
-<span class="source-line-no">2131</span><span id="line-2131">    @Override</span>
-<span class="source-line-no">2132</span><span id="line-2132">    public int getQualifierPosition() {</span>
-<span class="source-line-no">2133</span><span id="line-2133">      return this.qoffset;</span>
-<span class="source-line-no">2134</span><span id="line-2134">    }</span>
-<span class="source-line-no">2135</span><span id="line-2135"></span>
-<span class="source-line-no">2136</span><span id="line-2136">    @Override</span>
-<span class="source-line-no">2137</span><span id="line-2137">    public int getQualifierLength() {</span>
-<span class="source-line-no">2138</span><span id="line-2138">      return this.qlength;</span>
-<span class="source-line-no">2139</span><span id="line-2139">    }</span>
-<span class="source-line-no">2140</span><span id="line-2140">  }</span>
-<span class="source-line-no">2141</span><span id="line-2141"></span>
-<span class="source-line-no">2142</span><span id="line-2142">  private static class FirstOnRowDeleteFamilyCell extends EmptyCell {</span>
-<span class="source-line-no">2143</span><span id="line-2143">    // @formatter:off</span>
-<span class="source-line-no">2144</span><span id="line-2144">    private static final int FIXED_OVERHEAD = ClassSize.OBJECT // object</span>
-<span class="source-line-no">2145</span><span id="line-2145">      + ClassSize.REFERENCE * 2 // fBuffer and qBuffer</span>
-<span class="source-line-no">2146</span><span id="line-2146">      + Bytes.SIZEOF_INT * 3 // foffset, qoffset, qlength</span>
-<span class="source-line-no">2147</span><span id="line-2147">      + Bytes.SIZEOF_BYTE; // flength</span>
-<span class="source-line-no">2148</span><span id="line-2148">    // @formatter:on</span>
-<span class="source-line-no">2149</span><span id="line-2149">    private final byte[] row;</span>
-<span class="source-line-no">2150</span><span id="line-2150">    private final byte[] fam;</span>
-<span class="source-line-no">2151</span><span id="line-2151"></span>
-<span class="source-line-no">2152</span><span id="line-2152">    public FirstOnRowDeleteFamilyCell(byte[] row, byte[] fam) {</span>
-<span class="source-line-no">2153</span><span id="line-2153">      this.row = row;</span>
-<span class="source-line-no">2154</span><span id="line-2154">      this.fam = fam;</span>
-<span class="source-line-no">2155</span><span id="line-2155">    }</span>
-<span class="source-line-no">2156</span><span id="line-2156"></span>
-<span class="source-line-no">2157</span><span id="line-2157">    @Override</span>
-<span class="source-line-no">2158</span><span id="line-2158">    public long heapSize() {</span>
-<span class="source-line-no">2159</span><span id="line-2159">      return ClassSize.align(FIXED_OVERHEAD)</span>
-<span class="source-line-no">2160</span><span id="line-2160">        // array overhead</span>
-<span class="source-line-no">2161</span><span id="line-2161">        + (getRowLength() == 0 ? ClassSize.sizeOfByteArray(getRowLength()) : getRowLength())</span>
-<span class="source-line-no">2162</span><span id="line-2162">        + (getFamilyLength() == 0</span>
-<span class="source-line-no">2163</span><span id="line-2163">          ? ClassSize.sizeOfByteArray(getFamilyLength())</span>
-<span class="source-line-no">2164</span><span id="line-2164">          : getFamilyLength());</span>
-<span class="source-line-no">2165</span><span id="line-2165">    }</span>
-<span class="source-line-no">2166</span><span id="line-2166"></span>
-<span class="source-line-no">2167</span><span id="line-2167">    @Override</span>
-<span class="source-line-no">2168</span><span id="line-2168">    public byte[] getRowArray() {</span>
-<span class="source-line-no">2169</span><span id="line-2169">      return this.row;</span>
-<span class="source-line-no">2170</span><span id="line-2170">    }</span>
-<span class="source-line-no">2171</span><span id="line-2171"></span>
-<span class="source-line-no">2172</span><span id="line-2172">    @Override</span>
-<span class="source-line-no">2173</span><span id="line-2173">    public short getRowLength() {</span>
-<span class="source-line-no">2174</span><span id="line-2174">      return (short) this.row.length;</span>
-<span class="source-line-no">2175</span><span id="line-2175">    }</span>
-<span class="source-line-no">2176</span><span id="line-2176"></span>
-<span class="source-line-no">2177</span><span id="line-2177">    @Override</span>
-<span class="source-line-no">2178</span><span id="line-2178">    public byte[] getFamilyArray() {</span>
-<span class="source-line-no">2179</span><span id="line-2179">      return this.fam;</span>
-<span class="source-line-no">2180</span><span id="line-2180">    }</span>
-<span class="source-line-no">2181</span><span id="line-2181"></span>
-<span class="source-line-no">2182</span><span id="line-2182">    @Override</span>
-<span class="source-line-no">2183</span><span id="line-2183">    public byte getFamilyLength() {</span>
-<span class="source-line-no">2184</span><span id="line-2184">      return (byte) this.fam.length;</span>
-<span class="source-line-no">2185</span><span id="line-2185">    }</span>
-<span class="source-line-no">2186</span><span id="line-2186"></span>
-<span class="source-line-no">2187</span><span id="line-2187">    @Override</span>
-<span class="source-line-no">2188</span><span id="line-2188">    public long getTimestamp() {</span>
-<span class="source-line-no">2189</span><span id="line-2189">      return HConstants.LATEST_TIMESTAMP;</span>
-<span class="source-line-no">2190</span><span id="line-2190">    }</span>
-<span class="source-line-no">2191</span><span id="line-2191"></span>
-<span class="source-line-no">2192</span><span id="line-2192">    @Override</span>
-<span class="source-line-no">2193</span><span id="line-2193">    public byte getTypeByte() {</span>
-<span class="source-line-no">2194</span><span id="line-2194">      return KeyValue.Type.DeleteFamily.getCode();</span>
-<span class="source-line-no">2195</span><span id="line-2195">    }</span>
-<span class="source-line-no">2196</span><span id="line-2196"></span>
-<span class="source-line-no">2197</span><span id="line-2197">    @Override</span>
-<span class="source-line-no">2198</span><span id="line-2198">    public Type getType() {</span>
-<span class="source-line-no">2199</span><span id="line-2199">      return Type.DeleteFamily;</span>
-<span class="source-line-no">2200</span><span id="line-2200">    }</span>
-<span class="source-line-no">2201</span><span id="line-2201">  }</span>
-<span class="source-line-no">2202</span><span id="line-2202"></span>
-<span class="source-line-no">2203</span><span id="line-2203">  /**</span>
-<span class="source-line-no">2204</span><span id="line-2204">   * Writes the Cell's key part as it would have serialized in a KeyValue. The format is &amp;lt;2 bytes</span>
-<span class="source-line-no">2205</span><span id="line-2205">   * rk len&amp;gt;&amp;lt;rk&amp;gt;&amp;lt;1 byte cf len&amp;gt;&amp;lt;cf&amp;gt;&amp;lt;qualifier&amp;gt;&amp;lt;8 bytes</span>
-<span class="source-line-no">2206</span><span id="line-2206">   * timestamp&amp;gt;&amp;lt;1 byte type&amp;gt;</span>
-<span class="source-line-no">2207</span><span id="line-2207">   */</span>
-<span class="source-line-no">2208</span><span id="line-2208">  public static void writeFlatKey(ExtendedCell cell, DataOutput out) throws IOException {</span>
-<span class="source-line-no">2209</span><span id="line-2209">    short rowLen = cell.getRowLength();</span>
-<span class="source-line-no">2210</span><span id="line-2210">    byte fLen = cell.getFamilyLength();</span>
-<span class="source-line-no">2211</span><span id="line-2211">    int qLen = cell.getQualifierLength();</span>
-<span class="source-line-no">2212</span><span id="line-2212">    // Using just one if/else loop instead of every time checking before writing every</span>
-<span class="source-line-no">2213</span><span id="line-2213">    // component of cell</span>
-<span class="source-line-no">2214</span><span id="line-2214">    if (cell instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">2215</span><span id="line-2215">      out.writeShort(rowLen);</span>
-<span class="source-line-no">2216</span><span id="line-2216">      ByteBufferUtils.copyBufferToStream(out, ((ByteBufferExtendedCell) cell).getRowByteBuffer(),</span>
-<span class="source-line-no">2217</span><span id="line-2217">        ((ByteBufferExtendedCell) cell).getRowPosition(), rowLen);</span>
-<span class="source-line-no">2218</span><span id="line-2218">      out.writeByte(fLen);</span>
-<span class="source-line-no">2219</span><span id="line-2219">      ByteBufferUtils.copyBufferToStream(out, ((ByteBufferExtendedCell) cell).getFamilyByteBuffer(),</span>
-<span class="source-line-no">2220</span><span id="line-2220">        ((ByteBufferExtendedCell) cell).getFamilyPosition(), fLen);</span>
-<span class="source-line-no">2221</span><span id="line-2221">      ByteBufferUtils.copyBufferToStream(out,</span>
-<span class="source-line-no">2222</span><span id="line-2222">        ((ByteBufferExtendedCell) cell).getQualifierByteBuffer(),</span>
-<span class="source-line-no">2223</span><span id="line-2223">        ((ByteBufferExtendedCell) cell).getQualifierPosition(), qLen);</span>
-<span class="source-line-no">2224</span><span id="line-2224">    } else {</span>
-<span class="source-line-no">2225</span><span id="line-2225">      out.writeShort(rowLen);</span>
-<span class="source-line-no">2226</span><span id="line-2226">      out.write(cell.getRowArray(), cell.getRowOffset(), rowLen);</span>
-<span class="source-line-no">2227</span><span id="line-2227">      out.writeByte(fLen);</span>
-<span class="source-line-no">2228</span><span id="line-2228">      out.write(cell.getFamilyArray(), cell.getFamilyOffset(), fLen);</span>
-<span class="source-line-no">2229</span><span id="line-2229">      out.write(cell.getQualifierArray(), cell.getQualifierOffset(), qLen);</span>
-<span class="source-line-no">2230</span><span id="line-2230">    }</span>
-<span class="source-line-no">2231</span><span id="line-2231">    out.writeLong(cell.getTimestamp());</span>
-<span class="source-line-no">2232</span><span id="line-2232">    out.writeByte(cell.getTypeByte());</span>
-<span class="source-line-no">2233</span><span id="line-2233">  }</span>
-<span class="source-line-no">2234</span><span id="line-2234"></span>
-<span class="source-line-no">2235</span><span id="line-2235">  public static int writeFlatKey(ExtendedCell cell, OutputStream out) throws IOException {</span>
-<span class="source-line-no">2236</span><span id="line-2236">    short rowLen = cell.getRowLength();</span>
-<span class="source-line-no">2237</span><span id="line-2237">    byte fLen = cell.getFamilyLength();</span>
-<span class="source-line-no">2238</span><span id="line-2238">    int qLen = cell.getQualifierLength();</span>
-<span class="source-line-no">2239</span><span id="line-2239">    // Using just one if/else loop instead of every time checking before writing every</span>
-<span class="source-line-no">2240</span><span id="line-2240">    // component of cell</span>
-<span class="source-line-no">2241</span><span id="line-2241">    if (cell instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">2242</span><span id="line-2242">      StreamUtils.writeShort(out, rowLen);</span>
-<span class="source-line-no">2243</span><span id="line-2243">      ByteBufferUtils.copyBufferToStream(out, ((ByteBufferExtendedCell) cell).getRowByteBuffer(),</span>
-<span class="source-line-no">2244</span><span id="line-2244">        ((ByteBufferExtendedCell) cell).getRowPosition(), rowLen);</span>
-<span class="source-line-no">2245</span><span id="line-2245">      out.write(fLen);</span>
-<span class="source-line-no">2246</span><span id="line-2246">      ByteBufferUtils.copyBufferToStream(out, ((ByteBufferExtendedCell) cell).getFamilyByteBuffer(),</span>
-<span class="source-line-no">2247</span><span id="line-2247">        ((ByteBufferExtendedCell) cell).getFamilyPosition(), fLen);</span>
-<span class="source-line-no">2248</span><span id="line-2248">      ByteBufferUtils.copyBufferToStream(out,</span>
-<span class="source-line-no">2249</span><span id="line-2249">        ((ByteBufferExtendedCell) cell).getQualifierByteBuffer(),</span>
-<span class="source-line-no">2250</span><span id="line-2250">        ((ByteBufferExtendedCell) cell).getQualifierPosition(), qLen);</span>
-<span class="source-line-no">2251</span><span id="line-2251">    } else {</span>
-<span class="source-line-no">2252</span><span id="line-2252">      StreamUtils.writeShort(out, rowLen);</span>
-<span class="source-line-no">2253</span><span id="line-2253">      out.write(cell.getRowArray(), cell.getRowOffset(), rowLen);</span>
-<span class="source-line-no">2254</span><span id="line-2254">      out.write(fLen);</span>
-<span class="source-line-no">2255</span><span id="line-2255">      out.write(cell.getFamilyArray(), cell.getFamilyOffset(), fLen);</span>
-<span class="source-line-no">2256</span><span id="line-2256">      out.write(cell.getQualifierArray(), cell.getQualifierOffset(), qLen);</span>
-<span class="source-line-no">2257</span><span id="line-2257">    }</span>
-<span class="source-line-no">2258</span><span id="line-2258">    StreamUtils.writeLong(out, cell.getTimestamp());</span>
-<span class="source-line-no">2259</span><span id="line-2259">    out.write(cell.getTypeByte());</span>
-<span class="source-line-no">2260</span><span id="line-2260">    return Bytes.SIZEOF_SHORT + rowLen + Bytes.SIZEOF_BYTE + fLen + qLen + Bytes.SIZEOF_LONG</span>
-<span class="source-line-no">2261</span><span id="line-2261">      + Bytes.SIZEOF_BYTE;</span>
-<span class="source-line-no">2262</span><span id="line-2262">  }</span>
-<span class="source-line-no">2263</span><span id="line-2263"></span>
-<span class="source-line-no">2264</span><span id="line-2264">  /**</span>
-<span class="source-line-no">2265</span><span id="line-2265">   * Sets the given seqId to the cell. Marked as audience Private as of 1.2.0. Setting a Cell</span>
-<span class="source-line-no">2266</span><span id="line-2266">   * sequenceid is an internal implementation detail not for general public use.</span>
-<span class="source-line-no">2267</span><span id="line-2267">   * @throws IOException when the passed cell is not of type {@link ExtendedCell}</span>
-<span class="source-line-no">2268</span><span id="line-2268">   */</span>
-<span class="source-line-no">2269</span><span id="line-2269">  public static void setSequenceId(Cell cell, long seqId) throws IOException {</span>
-<span class="source-line-no">2270</span><span id="line-2270">    if (cell instanceof ExtendedCell) {</span>
-<span class="source-line-no">2271</span><span id="line-2271">      ((ExtendedCell) cell).setSequenceId(seqId);</span>
-<span class="source-line-no">2272</span><span id="line-2272">    } else {</span>
-<span class="source-line-no">2273</span><span id="line-2273">      throw new IOException(</span>
-<span class="source-line-no">2274</span><span id="line-2274">        new UnsupportedOperationException("Cell is not of type " + ExtendedCell.class.getName()));</span>
-<span class="source-line-no">2275</span><span id="line-2275">    }</span>
-<span class="source-line-no">2276</span><span id="line-2276">  }</span>
-<span class="source-line-no">2277</span><span id="line-2277"></span>
-<span class="source-line-no">2278</span><span id="line-2278">  /**</span>
-<span class="source-line-no">2279</span><span id="line-2279">   * Sets the given timestamp to the cell.</span>
-<span class="source-line-no">2280</span><span id="line-2280">   * @throws IOException when the passed cell is not of type {@link ExtendedCell}</span>
-<span class="source-line-no">2281</span><span id="line-2281">   */</span>
-<span class="source-line-no">2282</span><span id="line-2282">  public static void setTimestamp(Cell cell, long ts) throws IOException {</span>
-<span class="source-line-no">2283</span><span id="line-2283">    if (cell instanceof ExtendedCell) {</span>
-<span class="source-line-no">2284</span><span id="line-2284">      ((ExtendedCell) cell).setTimestamp(ts);</span>
-<span class="source-line-no">2285</span><span id="line-2285">    } else {</span>
-<span class="source-line-no">2286</span><span id="line-2286">      throw new IOException(</span>
-<span class="source-line-no">2287</span><span id="line-2287">        new UnsupportedOperationException("Cell is not of type " + ExtendedCell.class.getName()));</span>
-<span class="source-line-no">2288</span><span id="line-2288">    }</span>
-<span class="source-line-no">2289</span><span id="line-2289">  }</span>
-<span class="source-line-no">2290</span><span id="line-2290"></span>
-<span class="source-line-no">2291</span><span id="line-2291">  /**</span>
-<span class="source-line-no">2292</span><span id="line-2292">   * Sets the given timestamp to the cell.</span>
-<span class="source-line-no">2293</span><span id="line-2293">   * @throws IOException when the passed cell is not of type {@link ExtendedCell}</span>
-<span class="source-line-no">2294</span><span id="line-2294">   */</span>
-<span class="source-line-no">2295</span><span id="line-2295">  public static void setTimestamp(Cell cell, byte[] ts) throws IOException {</span>
-<span class="source-line-no">2296</span><span id="line-2296">    if (cell instanceof ExtendedCell) {</span>
-<span class="source-line-no">2297</span><span id="line-2297">      ((ExtendedCell) cell).setTimestamp(ts);</span>
-<span class="source-line-no">2298</span><span id="line-2298">    } else {</span>
-<span class="source-line-no">2299</span><span id="line-2299">      throw new IOException(</span>
-<span class="source-line-no">2300</span><span id="line-2300">        new UnsupportedOperationException("Cell is not of type " + ExtendedCell.class.getName()));</span>
-<span class="source-line-no">2301</span><span id="line-2301">    }</span>
-<span class="source-line-no">2302</span><span id="line-2302">  }</span>
-<span class="source-line-no">2303</span><span id="line-2303"></span>
-<span class="source-line-no">2304</span><span id="line-2304">  /**</span>
-<span class="source-line-no">2305</span><span id="line-2305">   * Sets the given timestamp to the cell iff current timestamp is</span>
-<span class="source-line-no">2306</span><span id="line-2306">   * {@link HConstants#LATEST_TIMESTAMP}.</span>
-<span class="source-line-no">2307</span><span id="line-2307">   * @return True if cell timestamp is modified.</span>
-<span class="source-line-no">2308</span><span id="line-2308">   * @throws IOException when the passed cell is not of type {@link ExtendedCell}</span>
-<span class="source-line-no">2309</span><span id="line-2309">   */</span>
-<span class="source-line-no">2310</span><span id="line-2310">  public static boolean updateLatestStamp(ExtendedCell cell, long ts) throws IOException {</span>
-<span class="source-line-no">2311</span><span id="line-2311">    if (cell.getTimestamp() == HConstants.LATEST_TIMESTAMP) {</span>
-<span class="source-line-no">2312</span><span id="line-2312">      cell.setTimestamp(ts);</span>
-<span class="source-line-no">2313</span><span id="line-2313">      return true;</span>
-<span class="source-line-no">2314</span><span id="line-2314">    }</span>
-<span class="source-line-no">2315</span><span id="line-2315">    return false;</span>
-<span class="source-line-no">2316</span><span id="line-2316">  }</span>
-<span class="source-line-no">2317</span><span id="line-2317"></span>
-<span class="source-line-no">2318</span><span id="line-2318">  /**</span>
-<span class="source-line-no">2319</span><span id="line-2319">   * Sets the given timestamp to the cell iff current timestamp is</span>
-<span class="source-line-no">2320</span><span id="line-2320">   * {@link HConstants#LATEST_TIMESTAMP}.</span>
-<span class="source-line-no">2321</span><span id="line-2321">   * @return True if cell timestamp is modified.</span>
-<span class="source-line-no">2322</span><span id="line-2322">   * @throws IOException when the passed cell is not of type {@link ExtendedCell}</span>
-<span class="source-line-no">2323</span><span id="line-2323">   */</span>
-<span class="source-line-no">2324</span><span id="line-2324">  public static boolean updateLatestStamp(Cell cell, byte[] ts) throws IOException {</span>
-<span class="source-line-no">2325</span><span id="line-2325">    if (cell.getTimestamp() == HConstants.LATEST_TIMESTAMP) {</span>
-<span class="source-line-no">2326</span><span id="line-2326">      setTimestamp(cell, ts);</span>
-<span class="source-line-no">2327</span><span id="line-2327">      return true;</span>
-<span class="source-line-no">2328</span><span id="line-2328">    }</span>
-<span class="source-line-no">2329</span><span id="line-2329">    return false;</span>
-<span class="source-line-no">2330</span><span id="line-2330">  }</span>
-<span class="source-line-no">2331</span><span id="line-2331"></span>
-<span class="source-line-no">2332</span><span id="line-2332">  /**</span>
-<span class="source-line-no">2333</span><span id="line-2333">   * Writes the row from the given cell to the output stream</span>
-<span class="source-line-no">2334</span><span id="line-2334">   * @param out     The outputstream to which the data has to be written</span>
-<span class="source-line-no">2335</span><span id="line-2335">   * @param cell    The cell whose contents has to be written</span>
-<span class="source-line-no">2336</span><span id="line-2336">   * @param rlength the row length</span>
-<span class="source-line-no">2337</span><span id="line-2337">   */</span>
-<span class="source-line-no">2338</span><span id="line-2338">  public static void writeRow(OutputStream out, Cell cell, short rlength) throws IOException {</span>
-<span class="source-line-no">2339</span><span id="line-2339">    if (cell instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">2340</span><span id="line-2340">      ByteBufferUtils.copyBufferToStream(out, ((ByteBufferExtendedCell) cell).getRowByteBuffer(),</span>
-<span class="source-line-no">2341</span><span id="line-2341">        ((ByteBufferExtendedCell) cell).getRowPosition(), rlength);</span>
-<span class="source-line-no">2342</span><span id="line-2342">    } else {</span>
-<span class="source-line-no">2343</span><span id="line-2343">      out.write(cell.getRowArray(), cell.getRowOffset(), rlength);</span>
-<span class="source-line-no">2344</span><span id="line-2344">    }</span>
-<span class="source-line-no">2345</span><span id="line-2345">  }</span>
-<span class="source-line-no">2346</span><span id="line-2346"></span>
-<span class="source-line-no">2347</span><span id="line-2347">  /**</span>
-<span class="source-line-no">2348</span><span id="line-2348">   * Writes the family from the given cell to the output stream</span>
-<span class="source-line-no">2349</span><span id="line-2349">   * @param out     The outputstream to which the data has to be written</span>
-<span class="source-line-no">2350</span><span id="line-2350">   * @param cell    The cell whose contents has to be written</span>
-<span class="source-line-no">2351</span><span id="line-2351">   * @param flength the family length</span>
-<span class="source-line-no">2352</span><span id="line-2352">   */</span>
-<span class="source-line-no">2353</span><span id="line-2353">  public static void writeFamily(OutputStream out, Cell cell, byte flength) throws IOException {</span>
-<span class="source-line-no">2354</span><span id="line-2354">    if (cell instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">2355</span><span id="line-2355">      ByteBufferUtils.copyBufferToStream(out, ((ByteBufferExtendedCell) cell).getFamilyByteBuffer(),</span>
-<span class="source-line-no">2356</span><span id="line-2356">        ((ByteBufferExtendedCell) cell).getFamilyPosition(), flength);</span>
-<span class="source-line-no">2357</span><span id="line-2357">    } else {</span>
-<span class="source-line-no">2358</span><span id="line-2358">      out.write(cell.getFamilyArray(), cell.getFamilyOffset(), flength);</span>
-<span class="source-line-no">2359</span><span id="line-2359">    }</span>
-<span class="source-line-no">2360</span><span id="line-2360">  }</span>
-<span class="source-line-no">2361</span><span id="line-2361"></span>
-<span class="source-line-no">2362</span><span id="line-2362">  /**</span>
-<span class="source-line-no">2363</span><span id="line-2363">   * Writes the qualifier from the given cell to the output stream</span>
-<span class="source-line-no">2364</span><span id="line-2364">   * @param out     The outputstream to which the data has to be written</span>
-<span class="source-line-no">2365</span><span id="line-2365">   * @param cell    The cell whose contents has to be written</span>
-<span class="source-line-no">2366</span><span id="line-2366">   * @param qlength the qualifier length</span>
-<span class="source-line-no">2367</span><span id="line-2367">   */</span>
-<span class="source-line-no">2368</span><span id="line-2368">  public static void writeQualifier(OutputStream out, Cell cell, int qlength) throws IOException {</span>
-<span class="source-line-no">2369</span><span id="line-2369">    if (cell instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">2370</span><span id="line-2370">      ByteBufferUtils.copyBufferToStream(out,</span>
-<span class="source-line-no">2371</span><span id="line-2371">        ((ByteBufferExtendedCell) cell).getQualifierByteBuffer(),</span>
-<span class="source-line-no">2372</span><span id="line-2372">        ((ByteBufferExtendedCell) cell).getQualifierPosition(), qlength);</span>
-<span class="source-line-no">2373</span><span id="line-2373">    } else {</span>
-<span class="source-line-no">2374</span><span id="line-2374">      out.write(cell.getQualifierArray(), cell.getQualifierOffset(), qlength);</span>
-<span class="source-line-no">2375</span><span id="line-2375">    }</span>
-<span class="source-line-no">2376</span><span id="line-2376">  }</span>
-<span class="source-line-no">2377</span><span id="line-2377"></span>
-<span class="source-line-no">2378</span><span id="line-2378">  /**</span>
-<span class="source-line-no">2379</span><span id="line-2379">   * Writes the qualifier from the given cell to the output stream excluding the common prefix</span>
-<span class="source-line-no">2380</span><span id="line-2380">   * @param out     The dataoutputstream to which the data has to be written</span>
-<span class="source-line-no">2381</span><span id="line-2381">   * @param cell    The cell whose contents has to be written</span>
-<span class="source-line-no">2382</span><span id="line-2382">   * @param qlength the qualifier length</span>
-<span class="source-line-no">2383</span><span id="line-2383">   */</span>
-<span class="source-line-no">2384</span><span id="line-2384">  public static void writeQualifierSkippingBytes(DataOutputStream out, Cell cell, int qlength,</span>
-<span class="source-line-no">2385</span><span id="line-2385">    int commonPrefix) throws IOException {</span>
-<span class="source-line-no">2386</span><span id="line-2386">    if (cell instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">2387</span><span id="line-2387">      ByteBufferUtils.copyBufferToStream((DataOutput) out,</span>
-<span class="source-line-no">2388</span><span id="line-2388">        ((ByteBufferExtendedCell) cell).getQualifierByteBuffer(),</span>
-<span class="source-line-no">2389</span><span id="line-2389">        ((ByteBufferExtendedCell) cell).getQualifierPosition() + commonPrefix,</span>
-<span class="source-line-no">2390</span><span id="line-2390">        qlength - commonPrefix);</span>
-<span class="source-line-no">2391</span><span id="line-2391">    } else {</span>
-<span class="source-line-no">2392</span><span id="line-2392">      out.write(cell.getQualifierArray(), cell.getQualifierOffset() + commonPrefix,</span>
-<span class="source-line-no">2393</span><span id="line-2393">        qlength - commonPrefix);</span>
-<span class="source-line-no">2394</span><span id="line-2394">    }</span>
-<span class="source-line-no">2395</span><span id="line-2395">  }</span>
-<span class="source-line-no">2396</span><span id="line-2396"></span>
-<span class="source-line-no">2397</span><span id="line-2397">  /**</span>
-<span class="source-line-no">2398</span><span id="line-2398">   * Writes the value from the given cell to the output stream</span>
-<span class="source-line-no">2399</span><span id="line-2399">   * @param out     The outputstream to which the data has to be written</span>
-<span class="source-line-no">2400</span><span id="line-2400">   * @param cell    The cell whose contents has to be written</span>
-<span class="source-line-no">2401</span><span id="line-2401">   * @param vlength the value length</span>
-<span class="source-line-no">2402</span><span id="line-2402">   */</span>
-<span class="source-line-no">2403</span><span id="line-2403">  public static void writeValue(OutputStream out, ExtendedCell cell, int vlength)</span>
-<span class="source-line-no">2404</span><span id="line-2404">    throws IOException {</span>
-<span class="source-line-no">2405</span><span id="line-2405">    if (cell instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">2406</span><span id="line-2406">      ByteBufferUtils.copyBufferToStream(out, ((ByteBufferExtendedCell) cell).getValueByteBuffer(),</span>
-<span class="source-line-no">2407</span><span id="line-2407">        ((ByteBufferExtendedCell) cell).getValuePosition(), vlength);</span>
-<span class="source-line-no">2408</span><span id="line-2408">    } else {</span>
-<span class="source-line-no">2409</span><span id="line-2409">      out.write(cell.getValueArray(), cell.getValueOffset(), vlength);</span>
-<span class="source-line-no">2410</span><span id="line-2410">    }</span>
-<span class="source-line-no">2411</span><span id="line-2411">  }</span>
-<span class="source-line-no">2412</span><span id="line-2412"></span>
-<span class="source-line-no">2413</span><span id="line-2413">  /**</span>
-<span class="source-line-no">2414</span><span id="line-2414">   * Writes the tag from the given cell to the output stream</span>
-<span class="source-line-no">2415</span><span id="line-2415">   * @param out        The outputstream to which the data has to be written</span>
-<span class="source-line-no">2416</span><span id="line-2416">   * @param cell       The cell whose contents has to be written</span>
-<span class="source-line-no">2417</span><span id="line-2417">   * @param tagsLength the tag length</span>
-<span class="source-line-no">2418</span><span id="line-2418">   */</span>
-<span class="source-line-no">2419</span><span id="line-2419">  public static void writeTags(OutputStream out, ExtendedCell cell, int tagsLength)</span>
-<span class="source-line-no">2420</span><span id="line-2420">    throws IOException {</span>
-<span class="source-line-no">2421</span><span id="line-2421">    if (cell instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">2422</span><span id="line-2422">      ByteBufferUtils.copyBufferToStream(out, ((ByteBufferExtendedCell) cell).getTagsByteBuffer(),</span>
-<span class="source-line-no">2423</span><span id="line-2423">        ((ByteBufferExtendedCell) cell).getTagsPosition(), tagsLength);</span>
-<span class="source-line-no">2424</span><span id="line-2424">    } else {</span>
-<span class="source-line-no">2425</span><span id="line-2425">      out.write(cell.getTagsArray(), cell.getTagsOffset(), tagsLength);</span>
-<span class="source-line-no">2426</span><span id="line-2426">    }</span>
-<span class="source-line-no">2427</span><span id="line-2427">  }</span>
-<span class="source-line-no">2428</span><span id="line-2428"></span>
-<span class="source-line-no">2429</span><span id="line-2429">  /**</span>
-<span class="source-line-no">2430</span><span id="line-2430">   * special case for Cell.equals</span>
-<span class="source-line-no">2431</span><span id="line-2431">   */</span>
-<span class="source-line-no">2432</span><span id="line-2432">  public static boolean equalsIgnoreMvccVersion(ExtendedCell a, ExtendedCell b) {</span>
-<span class="source-line-no">2433</span><span id="line-2433">    // row</span>
-<span class="source-line-no">2434</span><span id="line-2434">    boolean res = CellUtil.matchingRows(a, b);</span>
-<span class="source-line-no">2435</span><span id="line-2435">    if (!res) {</span>
-<span class="source-line-no">2436</span><span id="line-2436">      return res;</span>
-<span class="source-line-no">2437</span><span id="line-2437">    }</span>
-<span class="source-line-no">2438</span><span id="line-2438"></span>
-<span class="source-line-no">2439</span><span id="line-2439">    // family</span>
-<span class="source-line-no">2440</span><span id="line-2440">    res = CellUtil.matchingColumn(a, b);</span>
-<span class="source-line-no">2441</span><span id="line-2441">    if (!res) {</span>
-<span class="source-line-no">2442</span><span id="line-2442">      return res;</span>
-<span class="source-line-no">2443</span><span id="line-2443">    }</span>
-<span class="source-line-no">2444</span><span id="line-2444"></span>
-<span class="source-line-no">2445</span><span id="line-2445">    // timestamp: later sorts first</span>
-<span class="source-line-no">2446</span><span id="line-2446">    if (!CellUtil.matchingTimestamp(a, b)) {</span>
-<span class="source-line-no">2447</span><span id="line-2447">      return false;</span>
-<span class="source-line-no">2448</span><span id="line-2448">    }</span>
-<span class="source-line-no">2449</span><span id="line-2449"></span>
-<span class="source-line-no">2450</span><span id="line-2450">    // type</span>
-<span class="source-line-no">2451</span><span id="line-2451">    int c = (0xff &amp; b.getTypeByte()) - (0xff &amp; a.getTypeByte());</span>
-<span class="source-line-no">2452</span><span id="line-2452">    if (c != 0) {</span>
-<span class="source-line-no">2453</span><span id="line-2453">      return false;</span>
-<span class="source-line-no">2454</span><span id="line-2454">    } else {</span>
-<span class="source-line-no">2455</span><span id="line-2455">      return true;</span>
-<span class="source-line-no">2456</span><span id="line-2456">    }</span>
-<span class="source-line-no">2457</span><span id="line-2457">  }</span>
-<span class="source-line-no">2458</span><span id="line-2458"></span>
-<span class="source-line-no">2459</span><span id="line-2459">  /**</span>
-<span class="source-line-no">2460</span><span id="line-2460">   * Converts the rowkey bytes of the given cell into an int value</span>
-<span class="source-line-no">2461</span><span id="line-2461">   * @return rowkey as int</span>
-<span class="source-line-no">2462</span><span id="line-2462">   */</span>
-<span class="source-line-no">2463</span><span id="line-2463">  public static int getRowAsInt(Cell cell) {</span>
-<span class="source-line-no">2464</span><span id="line-2464">    if (cell instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">2465</span><span id="line-2465">      return ByteBufferUtils.toInt(((ByteBufferExtendedCell) cell).getRowByteBuffer(),</span>
-<span class="source-line-no">2466</span><span id="line-2466">        ((ByteBufferExtendedCell) cell).getRowPosition());</span>
-<span class="source-line-no">2467</span><span id="line-2467">    }</span>
-<span class="source-line-no">2468</span><span id="line-2468">    return Bytes.toInt(cell.getRowArray(), cell.getRowOffset());</span>
-<span class="source-line-no">2469</span><span id="line-2469">  }</span>
-<span class="source-line-no">2470</span><span id="line-2470"></span>
-<span class="source-line-no">2471</span><span id="line-2471">  /**</span>
-<span class="source-line-no">2472</span><span id="line-2472">   * Converts the value bytes of the given cell into a long value</span>
-<span class="source-line-no">2473</span><span id="line-2473">   * @return value as long</span>
-<span class="source-line-no">2474</span><span id="line-2474">   */</span>
-<span class="source-line-no">2475</span><span id="line-2475">  public static long getValueAsLong(Cell cell) {</span>
-<span class="source-line-no">2476</span><span id="line-2476">    if (cell instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">2477</span><span id="line-2477">      return ByteBufferUtils.toLong(((ByteBufferExtendedCell) cell).getValueByteBuffer(),</span>
-<span class="source-line-no">2478</span><span id="line-2478">        ((ByteBufferExtendedCell) cell).getValuePosition());</span>
-<span class="source-line-no">2479</span><span id="line-2479">    }</span>
-<span class="source-line-no">2480</span><span id="line-2480">    return Bytes.toLong(cell.getValueArray(), cell.getValueOffset());</span>
-<span class="source-line-no">2481</span><span id="line-2481">  }</span>
-<span class="source-line-no">2482</span><span id="line-2482"></span>
-<span class="source-line-no">2483</span><span id="line-2483">  /**</span>
-<span class="source-line-no">2484</span><span id="line-2484">   * Converts the value bytes of the given cell into a int value</span>
-<span class="source-line-no">2485</span><span id="line-2485">   * @return value as int</span>
-<span class="source-line-no">2486</span><span id="line-2486">   */</span>
-<span class="source-line-no">2487</span><span id="line-2487">  public static int getValueAsInt(Cell cell) {</span>
-<span class="source-line-no">2488</span><span id="line-2488">    if (cell instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">2489</span><span id="line-2489">      return ByteBufferUtils.toInt(((ByteBufferExtendedCell) cell).getValueByteBuffer(),</span>
-<span class="source-line-no">2490</span><span id="line-2490">        ((ByteBufferExtendedCell) cell).getValuePosition());</span>
-<span class="source-line-no">2491</span><span id="line-2491">    }</span>
-<span class="source-line-no">2492</span><span id="line-2492">    return Bytes.toInt(cell.getValueArray(), cell.getValueOffset());</span>
-<span class="source-line-no">2493</span><span id="line-2493">  }</span>
-<span class="source-line-no">2494</span><span id="line-2494"></span>
-<span class="source-line-no">2495</span><span id="line-2495">  /**</span>
-<span class="source-line-no">2496</span><span id="line-2496">   * Converts the value bytes of the given cell into a double value</span>
-<span class="source-line-no">2497</span><span id="line-2497">   * @return value as double</span>
-<span class="source-line-no">2498</span><span id="line-2498">   */</span>
-<span class="source-line-no">2499</span><span id="line-2499">  public static double getValueAsDouble(Cell cell) {</span>
-<span class="source-line-no">2500</span><span id="line-2500">    if (cell instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">2501</span><span id="line-2501">      return ByteBufferUtils.toDouble(((ByteBufferExtendedCell) cell).getValueByteBuffer(),</span>
-<span class="source-line-no">2502</span><span id="line-2502">        ((ByteBufferExtendedCell) cell).getValuePosition());</span>
-<span class="source-line-no">2503</span><span id="line-2503">    }</span>
-<span class="source-line-no">2504</span><span id="line-2504">    return Bytes.toDouble(cell.getValueArray(), cell.getValueOffset());</span>
-<span class="source-line-no">2505</span><span id="line-2505">  }</span>
-<span class="source-line-no">2506</span><span id="line-2506"></span>
-<span class="source-line-no">2507</span><span id="line-2507">  /**</span>
-<span class="source-line-no">2508</span><span id="line-2508">   * Converts the value bytes of the given cell into a BigDecimal</span>
-<span class="source-line-no">2509</span><span id="line-2509">   * @return value as BigDecimal</span>
-<span class="source-line-no">2510</span><span id="line-2510">   */</span>
-<span class="source-line-no">2511</span><span id="line-2511">  public static BigDecimal getValueAsBigDecimal(Cell cell) {</span>
-<span class="source-line-no">2512</span><span id="line-2512">    if (cell instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">2513</span><span id="line-2513">      return ByteBufferUtils.toBigDecimal(((ByteBufferExtendedCell) cell).getValueByteBuffer(),</span>
-<span class="source-line-no">2514</span><span id="line-2514">        ((ByteBufferExtendedCell) cell).getValuePosition(), cell.getValueLength());</span>
-<span class="source-line-no">2515</span><span id="line-2515">    }</span>
-<span class="source-line-no">2516</span><span id="line-2516">    return Bytes.toBigDecimal(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());</span>
-<span class="source-line-no">2517</span><span id="line-2517">  }</span>
-<span class="source-line-no">2518</span><span id="line-2518"></span>
-<span class="source-line-no">2519</span><span id="line-2519">  /**</span>
-<span class="source-line-no">2520</span><span id="line-2520">   * Compresses the tags to the given outputstream using the TagcompressionContext</span>
-<span class="source-line-no">2521</span><span id="line-2521">   * @param out                   the outputstream to which the compression should happen</span>
-<span class="source-line-no">2522</span><span id="line-2522">   * @param cell                  the cell which has tags</span>
-<span class="source-line-no">2523</span><span id="line-2523">   * @param tagCompressionContext the TagCompressionContext</span>
-<span class="source-line-no">2524</span><span id="line-2524">   * @throws IOException can throw IOException if the compression encounters issue</span>
-<span class="source-line-no">2525</span><span id="line-2525">   */</span>
-<span class="source-line-no">2526</span><span id="line-2526">  public static void compressTags(OutputStream out, ExtendedCell cell,</span>
-<span class="source-line-no">2527</span><span id="line-2527">    TagCompressionContext tagCompressionContext) throws IOException {</span>
-<span class="source-line-no">2528</span><span id="line-2528">    if (cell instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">2529</span><span id="line-2529">      tagCompressionContext.compressTags(out, ((ByteBufferExtendedCell) cell).getTagsByteBuffer(),</span>
-<span class="source-line-no">2530</span><span id="line-2530">        ((ByteBufferExtendedCell) cell).getTagsPosition(), cell.getTagsLength());</span>
-<span class="source-line-no">2531</span><span id="line-2531">    } else {</span>
-<span class="source-line-no">2532</span><span id="line-2532">      tagCompressionContext.compressTags(out, cell.getTagsArray(), cell.getTagsOffset(),</span>
-<span class="source-line-no">2533</span><span id="line-2533">        cell.getTagsLength());</span>
-<span class="source-line-no">2534</span><span id="line-2534">    }</span>
-<span class="source-line-no">2535</span><span id="line-2535">  }</span>
-<span class="source-line-no">2536</span><span id="line-2536"></span>
-<span class="source-line-no">2537</span><span id="line-2537">  public static void compressRow(OutputStream out, Cell cell, Dictionary dict) throws IOException {</span>
-<span class="source-line-no">2538</span><span id="line-2538">    if (cell instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">2539</span><span id="line-2539">      Dictionary.write(out, ((ByteBufferExtendedCell) cell).getRowByteBuffer(),</span>
-<span class="source-line-no">2540</span><span id="line-2540">        ((ByteBufferExtendedCell) cell).getRowPosition(), cell.getRowLength(), dict);</span>
-<span class="source-line-no">2541</span><span id="line-2541">    } else {</span>
-<span class="source-line-no">2542</span><span id="line-2542">      Dictionary.write(out, cell.getRowArray(), cell.getRowOffset(), cell.getRowLength(), dict);</span>
-<span class="source-line-no">2543</span><span id="line-2543">    }</span>
-<span class="source-line-no">2544</span><span id="line-2544">  }</span>
-<span class="source-line-no">2545</span><span id="line-2545"></span>
-<span class="source-line-no">2546</span><span id="line-2546">  public static void compressFamily(OutputStream out, Cell cell, Dictionary dict)</span>
-<span class="source-line-no">2547</span><span id="line-2547">    throws IOException {</span>
-<span class="source-line-no">2548</span><span id="line-2548">    if (cell instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">2549</span><span id="line-2549">      Dictionary.write(out, ((ByteBufferExtendedCell) cell).getFamilyByteBuffer(),</span>
-<span class="source-line-no">2550</span><span id="line-2550">        ((ByteBufferExtendedCell) cell).getFamilyPosition(), cell.getFamilyLength(), dict);</span>
-<span class="source-line-no">2551</span><span id="line-2551">    } else {</span>
-<span class="source-line-no">2552</span><span id="line-2552">      Dictionary.write(out, cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength(),</span>
-<span class="source-line-no">2553</span><span id="line-2553">        dict);</span>
-<span class="source-line-no">2554</span><span id="line-2554">    }</span>
-<span class="source-line-no">2555</span><span id="line-2555">  }</span>
-<span class="source-line-no">2556</span><span id="line-2556"></span>
-<span class="source-line-no">2557</span><span id="line-2557">  public static void compressQualifier(OutputStream out, Cell cell, Dictionary dict)</span>
-<span class="source-line-no">2558</span><span id="line-2558">    throws IOException {</span>
-<span class="source-line-no">2559</span><span id="line-2559">    if (cell instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">2560</span><span id="line-2560">      Dictionary.write(out, ((ByteBufferExtendedCell) cell).getQualifierByteBuffer(),</span>
-<span class="source-line-no">2561</span><span id="line-2561">        ((ByteBufferExtendedCell) cell).getQualifierPosition(), cell.getQualifierLength(), dict);</span>
-<span class="source-line-no">2562</span><span id="line-2562">    } else {</span>
-<span class="source-line-no">2563</span><span id="line-2563">      Dictionary.write(out, cell.getQualifierArray(), cell.getQualifierOffset(),</span>
-<span class="source-line-no">2564</span><span id="line-2564">        cell.getQualifierLength(), dict);</span>
-<span class="source-line-no">2565</span><span id="line-2565">    }</span>
-<span class="source-line-no">2566</span><span id="line-2566">  }</span>
-<span class="source-line-no">2567</span><span id="line-2567"></span>
-<span class="source-line-no">2568</span><span id="line-2568">  /**</span>
-<span class="source-line-no">2569</span><span id="line-2569">   * Used when a cell needs to be compared with a key byte[] such as cases of finding the index from</span>
-<span class="source-line-no">2570</span><span id="line-2570">   * the index block, bloom keys from the bloom blocks This byte[] is expected to be serialized in</span>
-<span class="source-line-no">2571</span><span id="line-2571">   * the KeyValue serialization format If the KeyValue (Cell's) serialization format changes this</span>
-<span class="source-line-no">2572</span><span id="line-2572">   * method cannot be used.</span>
-<span class="source-line-no">2573</span><span id="line-2573">   * @param comparator the {@link CellComparator} to use for comparison</span>
-<span class="source-line-no">2574</span><span id="line-2574">   * @param left       the cell to be compared</span>
-<span class="source-line-no">2575</span><span id="line-2575">   * @param key        the serialized key part of a KeyValue</span>
-<span class="source-line-no">2576</span><span id="line-2576">   * @param offset     the offset in the key byte[]</span>
-<span class="source-line-no">2577</span><span id="line-2577">   * @param length     the length of the key byte[]</span>
-<span class="source-line-no">2578</span><span id="line-2578">   * @return an int greater than 0 if left is greater than right lesser than 0 if left is lesser</span>
-<span class="source-line-no">2579</span><span id="line-2579">   *         than right equal to 0 if left is equal to right</span>
-<span class="source-line-no">2580</span><span id="line-2580">   */</span>
-<span class="source-line-no">2581</span><span id="line-2581">  public static final int compare(CellComparator comparator, ExtendedCell left, byte[] key,</span>
-<span class="source-line-no">2582</span><span id="line-2582">    int offset, int length) {</span>
-<span class="source-line-no">2583</span><span id="line-2583">    // row</span>
-<span class="source-line-no">2584</span><span id="line-2584">    short rrowlength = Bytes.toShort(key, offset);</span>
-<span class="source-line-no">2585</span><span id="line-2585">    int c = comparator.compareRows(left, key, offset + Bytes.SIZEOF_SHORT, rrowlength);</span>
-<span class="source-line-no">2586</span><span id="line-2586">    if (c != 0) return c;</span>
-<span class="source-line-no">2587</span><span id="line-2587"></span>
-<span class="source-line-no">2588</span><span id="line-2588">    // Compare the rest of the two KVs without making any assumptions about</span>
-<span class="source-line-no">2589</span><span id="line-2589">    // the common prefix. This function will not compare rows anyway, so we</span>
-<span class="source-line-no">2590</span><span id="line-2590">    // don't need to tell it that the common prefix includes the row.</span>
-<span class="source-line-no">2591</span><span id="line-2591">    return compareWithoutRow(comparator, left, key, offset, length, rrowlength);</span>
-<span class="source-line-no">2592</span><span id="line-2592">  }</span>
-<span class="source-line-no">2593</span><span id="line-2593"></span>
-<span class="source-line-no">2594</span><span id="line-2594">  /**</span>
-<span class="source-line-no">2595</span><span id="line-2595">   * Compare columnFamily, qualifier, timestamp, and key type (everything except the row). This</span>
-<span class="source-line-no">2596</span><span id="line-2596">   * method is used both in the normal comparator and the "same-prefix" comparator. Note that we are</span>
-<span class="source-line-no">2597</span><span id="line-2597">   * assuming that row portions of both KVs have already been parsed and found identical, and we</span>
-<span class="source-line-no">2598</span><span id="line-2598">   * don't validate that assumption here.</span>
-<span class="source-line-no">2599</span><span id="line-2599">   * @param comparator the {@link CellComparator} to use for comparison</span>
-<span class="source-line-no">2600</span><span id="line-2600">   * @param left       the cell to be compared</span>
-<span class="source-line-no">2601</span><span id="line-2601">   * @param right      the serialized key part of a key-value</span>
-<span class="source-line-no">2602</span><span id="line-2602">   * @param roffset    the offset in the key byte[]</span>
-<span class="source-line-no">2603</span><span id="line-2603">   * @param rlength    the length of the key byte[]</span>
-<span class="source-line-no">2604</span><span id="line-2604">   * @param rowlength  the row length</span>
-<span class="source-line-no">2605</span><span id="line-2605">   * @return greater than 0 if left cell is bigger, less than 0 if right cell is bigger, 0 if both</span>
-<span class="source-line-no">2606</span><span id="line-2606">   *         cells are equal</span>
-<span class="source-line-no">2607</span><span id="line-2607">   */</span>
-<span class="source-line-no">2608</span><span id="line-2608">  static final int compareWithoutRow(CellComparator comparator, ExtendedCell left, byte[] right,</span>
-<span class="source-line-no">2609</span><span id="line-2609">    int roffset, int rlength, short rowlength) {</span>
-<span class="source-line-no">2610</span><span id="line-2610">    /***</span>
-<span class="source-line-no">2611</span><span id="line-2611">     * KeyValue Format and commonLength:</span>
-<span class="source-line-no">2612</span><span id="line-2612">     * |_keyLen_|_valLen_|_rowLen_|_rowKey_|_famiLen_|_fami_|_Quali_|....</span>
-<span class="source-line-no">2613</span><span id="line-2613">     * ------------------|-------commonLength--------|--------------</span>
-<span class="source-line-no">2614</span><span id="line-2614">     */</span>
-<span class="source-line-no">2615</span><span id="line-2615">    int commonLength = KeyValue.ROW_LENGTH_SIZE + KeyValue.FAMILY_LENGTH_SIZE + rowlength;</span>
-<span class="source-line-no">2616</span><span id="line-2616"></span>
-<span class="source-line-no">2617</span><span id="line-2617">    // commonLength + TIMESTAMP_TYPE_SIZE</span>
-<span class="source-line-no">2618</span><span id="line-2618">    int commonLengthWithTSAndType = KeyValue.TIMESTAMP_TYPE_SIZE + commonLength;</span>
-<span class="source-line-no">2619</span><span id="line-2619">    // ColumnFamily + Qualifier length.</span>
-<span class="source-line-no">2620</span><span id="line-2620">    int lcolumnlength = left.getFamilyLength() + left.getQualifierLength();</span>
-<span class="source-line-no">2621</span><span id="line-2621">    int rcolumnlength = rlength - commonLengthWithTSAndType;</span>
-<span class="source-line-no">2622</span><span id="line-2622"></span>
-<span class="source-line-no">2623</span><span id="line-2623">    byte ltype = left.getTypeByte();</span>
-<span class="source-line-no">2624</span><span id="line-2624">    byte rtype = right[roffset + (rlength - 1)];</span>
-<span class="source-line-no">2625</span><span id="line-2625"></span>
-<span class="source-line-no">2626</span><span id="line-2626">    // If the column is not specified, the "minimum" key type appears the</span>
-<span class="source-line-no">2627</span><span id="line-2627">    // latest in the sorted order, regardless of the timestamp. This is used</span>
-<span class="source-line-no">2628</span><span id="line-2628">    // for specifying the last key/value in a given row, because there is no</span>
-<span class="source-line-no">2629</span><span id="line-2629">    // "lexicographically last column" (it would be infinitely long). The</span>
-<span class="source-line-no">2630</span><span id="line-2630">    // "maximum" key type does not need this behavior.</span>
-<span class="source-line-no">2631</span><span id="line-2631">    if (lcolumnlength == 0 &amp;&amp; ltype == KeyValue.Type.Minimum.getCode()) {</span>
-<span class="source-line-no">2632</span><span id="line-2632">      // left is "bigger", i.e. it appears later in the sorted order</span>
-<span class="source-line-no">2633</span><span id="line-2633">      return 1;</span>
-<span class="source-line-no">2634</span><span id="line-2634">    }</span>
-<span class="source-line-no">2635</span><span id="line-2635">    if (rcolumnlength == 0 &amp;&amp; rtype == KeyValue.Type.Minimum.getCode()) {</span>
-<span class="source-line-no">2636</span><span id="line-2636">      return -1;</span>
-<span class="source-line-no">2637</span><span id="line-2637">    }</span>
-<span class="source-line-no">2638</span><span id="line-2638"></span>
-<span class="source-line-no">2639</span><span id="line-2639">    int rfamilyoffset = commonLength + roffset;</span>
-<span class="source-line-no">2640</span><span id="line-2640"></span>
-<span class="source-line-no">2641</span><span id="line-2641">    // Column family length.</span>
-<span class="source-line-no">2642</span><span id="line-2642">    int lfamilylength = left.getFamilyLength();</span>
-<span class="source-line-no">2643</span><span id="line-2643">    int rfamilylength = right[rfamilyoffset - 1];</span>
-<span class="source-line-no">2644</span><span id="line-2644">    // If left family size is not equal to right family size, we need not</span>
-<span class="source-line-no">2645</span><span id="line-2645">    // compare the qualifiers.</span>
-<span class="source-line-no">2646</span><span id="line-2646">    boolean sameFamilySize = (lfamilylength == rfamilylength);</span>
-<span class="source-line-no">2647</span><span id="line-2647">    if (!sameFamilySize) {</span>
-<span class="source-line-no">2648</span><span id="line-2648">      // comparing column family is enough.</span>
-<span class="source-line-no">2649</span><span id="line-2649">      return CellUtil.compareFamilies(left, right, rfamilyoffset, rfamilylength);</span>
-<span class="source-line-no">2650</span><span id="line-2650">    }</span>
-<span class="source-line-no">2651</span><span id="line-2651">    // Compare family &amp; qualifier together.</span>
-<span class="source-line-no">2652</span><span id="line-2652">    // Families are same. Compare on qualifiers.</span>
-<span class="source-line-no">2653</span><span id="line-2653">    int comparison = CellUtil.compareColumns(left, right, rfamilyoffset, rfamilylength,</span>
-<span class="source-line-no">2654</span><span id="line-2654">      rfamilyoffset + rfamilylength, (rcolumnlength - rfamilylength));</span>
-<span class="source-line-no">2655</span><span id="line-2655">    if (comparison != 0) {</span>
-<span class="source-line-no">2656</span><span id="line-2656">      return comparison;</span>
-<span class="source-line-no">2657</span><span id="line-2657">    }</span>
-<span class="source-line-no">2658</span><span id="line-2658"></span>
-<span class="source-line-no">2659</span><span id="line-2659">    // //</span>
-<span class="source-line-no">2660</span><span id="line-2660">    // Next compare timestamps.</span>
-<span class="source-line-no">2661</span><span id="line-2661">    long rtimestamp = Bytes.toLong(right, roffset + (rlength - KeyValue.TIMESTAMP_TYPE_SIZE));</span>
-<span class="source-line-no">2662</span><span id="line-2662">    int compare = comparator.compareTimestamps(left.getTimestamp(), rtimestamp);</span>
-<span class="source-line-no">2663</span><span id="line-2663">    if (compare != 0) {</span>
-<span class="source-line-no">2664</span><span id="line-2664">      return compare;</span>
-<span class="source-line-no">2665</span><span id="line-2665">    }</span>
-<span class="source-line-no">2666</span><span id="line-2666"></span>
-<span class="source-line-no">2667</span><span id="line-2667">    // Compare types. Let the delete types sort ahead of puts; i.e. types</span>
-<span class="source-line-no">2668</span><span id="line-2668">    // of higher numbers sort before those of lesser numbers. Maximum (255)</span>
-<span class="source-line-no">2669</span><span id="line-2669">    // appears ahead of everything, and minimum (0) appears after</span>
-<span class="source-line-no">2670</span><span id="line-2670">    // everything.</span>
-<span class="source-line-no">2671</span><span id="line-2671">    return (0xff &amp; rtype) - (0xff &amp; ltype);</span>
-<span class="source-line-no">2672</span><span id="line-2672">  }</span>
-<span class="source-line-no">2673</span><span id="line-2673"></span>
-<span class="source-line-no">2674</span><span id="line-2674">  /**</span>
-<span class="source-line-no">2675</span><span id="line-2675">   * Return a new cell is located following input cell. If both of type and timestamp are minimum,</span>
-<span class="source-line-no">2676</span><span id="line-2676">   * the input cell will be returned directly.</span>
-<span class="source-line-no">2677</span><span id="line-2677">   */</span>
-<span class="source-line-no">2678</span><span id="line-2678">  public static ExtendedCell createNextOnRowCol(ExtendedCell cell) {</span>
-<span class="source-line-no">2679</span><span id="line-2679">    long ts = cell.getTimestamp();</span>
-<span class="source-line-no">2680</span><span id="line-2680">    byte type = cell.getTypeByte();</span>
-<span class="source-line-no">2681</span><span id="line-2681">    if (type != KeyValue.Type.Minimum.getCode()) {</span>
-<span class="source-line-no">2682</span><span id="line-2682">      type = KeyValue.Type.values()[KeyValue.Type.codeToType(type).ordinal() - 1].getCode();</span>
-<span class="source-line-no">2683</span><span id="line-2683">    } else if (ts != PrivateConstants.OLDEST_TIMESTAMP) {</span>
-<span class="source-line-no">2684</span><span id="line-2684">      ts = ts - 1;</span>
-<span class="source-line-no">2685</span><span id="line-2685">      type = KeyValue.Type.Maximum.getCode();</span>
-<span class="source-line-no">2686</span><span id="line-2686">    } else {</span>
-<span class="source-line-no">2687</span><span id="line-2687">      return cell;</span>
-<span class="source-line-no">2688</span><span id="line-2688">    }</span>
-<span class="source-line-no">2689</span><span id="line-2689">    return createNextOnRowCol(cell, ts, type);</span>
-<span class="source-line-no">2690</span><span id="line-2690">  }</span>
-<span class="source-line-no">2691</span><span id="line-2691"></span>
-<span class="source-line-no">2692</span><span id="line-2692">  static ExtendedCell createNextOnRowCol(ExtendedCell cell, long ts, byte type) {</span>
-<span class="source-line-no">2693</span><span id="line-2693">    if (cell instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">2694</span><span id="line-2694">      return new LastOnRowColByteBufferExtendedCell(</span>
-<span class="source-line-no">2695</span><span id="line-2695">        ((ByteBufferExtendedCell) cell).getRowByteBuffer(),</span>
-<span class="source-line-no">2696</span><span id="line-2696">        ((ByteBufferExtendedCell) cell).getRowPosition(), cell.getRowLength(),</span>
-<span class="source-line-no">2697</span><span id="line-2697">        ((ByteBufferExtendedCell) cell).getFamilyByteBuffer(),</span>
-<span class="source-line-no">2698</span><span id="line-2698">        ((ByteBufferExtendedCell) cell).getFamilyPosition(), cell.getFamilyLength(),</span>
-<span class="source-line-no">2699</span><span id="line-2699">        ((ByteBufferExtendedCell) cell).getQualifierByteBuffer(),</span>
-<span class="source-line-no">2700</span><span id="line-2700">        ((ByteBufferExtendedCell) cell).getQualifierPosition(), cell.getQualifierLength()) {</span>
-<span class="source-line-no">2701</span><span id="line-2701">        @Override</span>
-<span class="source-line-no">2702</span><span id="line-2702">        public long getTimestamp() {</span>
-<span class="source-line-no">2703</span><span id="line-2703">          return ts;</span>
-<span class="source-line-no">2704</span><span id="line-2704">        }</span>
-<span class="source-line-no">2705</span><span id="line-2705"></span>
-<span class="source-line-no">2706</span><span id="line-2706">        @Override</span>
-<span class="source-line-no">2707</span><span id="line-2707">        public byte getTypeByte() {</span>
-<span class="source-line-no">2708</span><span id="line-2708">          return type;</span>
-<span class="source-line-no">2709</span><span id="line-2709">        }</span>
-<span class="source-line-no">2710</span><span id="line-2710">      };</span>
-<span class="source-line-no">2711</span><span id="line-2711">    }</span>
-<span class="source-line-no">2712</span><span id="line-2712">    return new LastOnRowColCell(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength(),</span>
-<span class="source-line-no">2713</span><span id="line-2713">      cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength(),</span>
-<span class="source-line-no">2714</span><span id="line-2714">      cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength()) {</span>
-<span class="source-line-no">2715</span><span id="line-2715">      @Override</span>
-<span class="source-line-no">2716</span><span id="line-2716">      public long getTimestamp() {</span>
-<span class="source-line-no">2717</span><span id="line-2717">        return ts;</span>
-<span class="source-line-no">2718</span><span id="line-2718">      }</span>
-<span class="source-line-no">2719</span><span id="line-2719"></span>
-<span class="source-line-no">2720</span><span id="line-2720">      @Override</span>
-<span class="source-line-no">2721</span><span id="line-2721">      public byte getTypeByte() {</span>
-<span class="source-line-no">2722</span><span id="line-2722">        return type;</span>
-<span class="source-line-no">2723</span><span id="line-2723">      }</span>
-<span class="source-line-no">2724</span><span id="line-2724">    };</span>
-<span class="source-line-no">2725</span><span id="line-2725">  }</span>
-<span class="source-line-no">2726</span><span id="line-2726"></span>
-<span class="source-line-no">2727</span><span id="line-2727">  /**</span>
-<span class="source-line-no">2728</span><span id="line-2728">   * Estimate based on keyvalue's serialization format in the RPC layer. Note that there is an extra</span>
-<span class="source-line-no">2729</span><span id="line-2729">   * SIZEOF_INT added to the size here that indicates the actual length of the cell for cases where</span>
-<span class="source-line-no">2730</span><span id="line-2730">   * cell's are serialized in a contiguous format (For eg in RPCs).</span>
-<span class="source-line-no">2731</span><span id="line-2731">   * @return Estimate of the &lt;code&gt;cell&lt;/code&gt; size in bytes plus an extra SIZEOF_INT indicating the</span>
-<span class="source-line-no">2732</span><span id="line-2732">   *         actual cell length.</span>
-<span class="source-line-no">2733</span><span id="line-2733">   */</span>
-<span class="source-line-no">2734</span><span id="line-2734">  public static int estimatedSerializedSizeOf(final Cell cell) {</span>
-<span class="source-line-no">2735</span><span id="line-2735">    return cell.getSerializedSize() + Bytes.SIZEOF_INT;</span>
-<span class="source-line-no">2736</span><span id="line-2736">  }</span>
-<span class="source-line-no">2737</span><span id="line-2737"></span>
-<span class="source-line-no">2738</span><span id="line-2738">  /**</span>
-<span class="source-line-no">2739</span><span id="line-2739">   * Calculates the serialized key size. We always serialize in the KeyValue's serialization format.</span>
-<span class="source-line-no">2740</span><span id="line-2740">   * @param cell the cell for which the key size has to be calculated.</span>
-<span class="source-line-no">2741</span><span id="line-2741">   * @return the key size</span>
-<span class="source-line-no">2742</span><span id="line-2742">   */</span>
-<span class="source-line-no">2743</span><span id="line-2743">  public static int estimatedSerializedSizeOfKey(final Cell cell) {</span>
-<span class="source-line-no">2744</span><span id="line-2744">    if (cell instanceof KeyValue) return ((KeyValue) cell).getKeyLength();</span>
-<span class="source-line-no">2745</span><span id="line-2745">    return cell.getRowLength() + cell.getFamilyLength() + cell.getQualifierLength()</span>
-<span class="source-line-no">2746</span><span id="line-2746">      + KeyValue.KEY_INFRASTRUCTURE_SIZE;</span>
-<span class="source-line-no">2747</span><span id="line-2747">  }</span>
-<span class="source-line-no">2748</span><span id="line-2748"></span>
-<span class="source-line-no">2749</span><span id="line-2749">  /**</span>
-<span class="source-line-no">2750</span><span id="line-2750">   * This method exists just to encapsulate how we serialize keys. To be replaced by a factory that</span>
-<span class="source-line-no">2751</span><span id="line-2751">   * we query to figure what the Cell implementation is and then, what serialization engine to use</span>
-<span class="source-line-no">2752</span><span id="line-2752">   * and further, how to serialize the key for inclusion in hfile index. TODO.</span>
-<span class="source-line-no">2753</span><span id="line-2753">   * @return The key portion of the Cell serialized in the old-school KeyValue way or null if passed</span>
-<span class="source-line-no">2754</span><span id="line-2754">   *         a null &lt;code&gt;cell&lt;/code&gt;</span>
-<span class="source-line-no">2755</span><span id="line-2755">   */</span>
-<span class="source-line-no">2756</span><span id="line-2756">  public static byte[] getCellKeySerializedAsKeyValueKey(final ExtendedCell cell) {</span>
-<span class="source-line-no">2757</span><span id="line-2757">    if (cell == null) return null;</span>
-<span class="source-line-no">2758</span><span id="line-2758">    byte[] b = new byte[KeyValueUtil.keyLength(cell)];</span>
-<span class="source-line-no">2759</span><span id="line-2759">    KeyValueUtil.appendKeyTo(cell, b, 0);</span>
-<span class="source-line-no">2760</span><span id="line-2760">    return b;</span>
-<span class="source-line-no">2761</span><span id="line-2761">  }</span>
-<span class="source-line-no">2762</span><span id="line-2762"></span>
-<span class="source-line-no">2763</span><span id="line-2763">  /**</span>
-<span class="source-line-no">2764</span><span id="line-2764">   * Create a Cell that is smaller than all other possible Cells for the given Cell's row.</span>
-<span class="source-line-no">2765</span><span id="line-2765">   * @return First possible Cell on passed Cell's row.</span>
-<span class="source-line-no">2766</span><span id="line-2766">   */</span>
-<span class="source-line-no">2767</span><span id="line-2767">  public static ExtendedCell createFirstOnRow(final Cell cell) {</span>
-<span class="source-line-no">2768</span><span id="line-2768">    if (cell instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">2769</span><span id="line-2769">      return new FirstOnRowByteBufferExtendedCell(</span>
-<span class="source-line-no">2770</span><span id="line-2770">        ((ByteBufferExtendedCell) cell).getRowByteBuffer(),</span>
-<span class="source-line-no">2771</span><span id="line-2771">        ((ByteBufferExtendedCell) cell).getRowPosition(), cell.getRowLength());</span>
-<span class="source-line-no">2772</span><span id="line-2772">    }</span>
-<span class="source-line-no">2773</span><span id="line-2773">    return new FirstOnRowCell(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength());</span>
-<span class="source-line-no">2774</span><span id="line-2774">  }</span>
-<span class="source-line-no">2775</span><span id="line-2775"></span>
-<span class="source-line-no">2776</span><span id="line-2776">  public static ExtendedCell createFirstOnRow(final byte[] row, int roffset, short rlength) {</span>
-<span class="source-line-no">2777</span><span id="line-2777">    return new FirstOnRowCell(row, roffset, rlength);</span>
-<span class="source-line-no">2778</span><span id="line-2778">  }</span>
-<span class="source-line-no">2779</span><span id="line-2779"></span>
-<span class="source-line-no">2780</span><span id="line-2780">  public static ExtendedCell createFirstOnRow(final byte[] row, final byte[] family,</span>
-<span class="source-line-no">2781</span><span id="line-2781">    final byte[] col) {</span>
-<span class="source-line-no">2782</span><span id="line-2782">    return createFirstOnRow(row, 0, (short) row.length, family, 0, (byte) family.length, col, 0,</span>
-<span class="source-line-no">2783</span><span id="line-2783">      col.length);</span>
-<span class="source-line-no">2784</span><span id="line-2784">  }</span>
-<span class="source-line-no">2785</span><span id="line-2785"></span>
-<span class="source-line-no">2786</span><span id="line-2786">  public static ExtendedCell createFirstOnRow(final byte[] row, int roffset, short rlength,</span>
-<span class="source-line-no">2787</span><span id="line-2787">    final byte[] family, int foffset, byte flength, final byte[] col, int coffset, int clength) {</span>
-<span class="source-line-no">2788</span><span id="line-2788">    return new FirstOnRowColCell(row, roffset, rlength, family, foffset, flength, col, coffset,</span>
-<span class="source-line-no">2789</span><span id="line-2789">      clength);</span>
-<span class="source-line-no">2790</span><span id="line-2790">  }</span>
-<span class="source-line-no">2791</span><span id="line-2791"></span>
-<span class="source-line-no">2792</span><span id="line-2792">  public static ExtendedCell createFirstOnRow(final byte[] row) {</span>
-<span class="source-line-no">2793</span><span id="line-2793">    return createFirstOnRow(row, 0, (short) row.length);</span>
-<span class="source-line-no">2794</span><span id="line-2794">  }</span>
-<span class="source-line-no">2795</span><span id="line-2795"></span>
-<span class="source-line-no">2796</span><span id="line-2796">  public static ExtendedCell createFirstOnRowFamily(Cell cell, byte[] fArray, int foff, int flen) {</span>
-<span class="source-line-no">2797</span><span id="line-2797">    if (cell instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">2798</span><span id="line-2798">      return new FirstOnRowColByteBufferExtendedCell(</span>
-<span class="source-line-no">2799</span><span id="line-2799">        ((ByteBufferExtendedCell) cell).getRowByteBuffer(),</span>
-<span class="source-line-no">2800</span><span id="line-2800">        ((ByteBufferExtendedCell) cell).getRowPosition(), cell.getRowLength(),</span>
-<span class="source-line-no">2801</span><span id="line-2801">        ByteBuffer.wrap(fArray), foff, (byte) flen, HConstants.EMPTY_BYTE_BUFFER, 0, 0);</span>
-<span class="source-line-no">2802</span><span id="line-2802">    }</span>
-<span class="source-line-no">2803</span><span id="line-2803">    return new FirstOnRowColCell(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength(),</span>
-<span class="source-line-no">2804</span><span id="line-2804">      fArray, foff, (byte) flen, HConstants.EMPTY_BYTE_ARRAY, 0, 0);</span>
-<span class="source-line-no">2805</span><span id="line-2805">  }</span>
-<span class="source-line-no">2806</span><span id="line-2806"></span>
-<span class="source-line-no">2807</span><span id="line-2807">  public static ExtendedCell createFirstOnRowCol(final Cell cell) {</span>
-<span class="source-line-no">2808</span><span id="line-2808">    if (cell instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">2809</span><span id="line-2809">      return new FirstOnRowColByteBufferExtendedCell(</span>
-<span class="source-line-no">2810</span><span id="line-2810">        ((ByteBufferExtendedCell) cell).getRowByteBuffer(),</span>
-<span class="source-line-no">2811</span><span id="line-2811">        ((ByteBufferExtendedCell) cell).getRowPosition(), cell.getRowLength(),</span>
-<span class="source-line-no">2812</span><span id="line-2812">        HConstants.EMPTY_BYTE_BUFFER, 0, (byte) 0,</span>
-<span class="source-line-no">2813</span><span id="line-2813">        ((ByteBufferExtendedCell) cell).getQualifierByteBuffer(),</span>
-<span class="source-line-no">2814</span><span id="line-2814">        ((ByteBufferExtendedCell) cell).getQualifierPosition(), cell.getQualifierLength());</span>
-<span class="source-line-no">2815</span><span id="line-2815">    }</span>
-<span class="source-line-no">2816</span><span id="line-2816">    return new FirstOnRowColCell(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength(),</span>
-<span class="source-line-no">2817</span><span id="line-2817">      HConstants.EMPTY_BYTE_ARRAY, 0, (byte) 0, cell.getQualifierArray(), cell.getQualifierOffset(),</span>
-<span class="source-line-no">2818</span><span id="line-2818">      cell.getQualifierLength());</span>
-<span class="source-line-no">2819</span><span id="line-2819">  }</span>
-<span class="source-line-no">2820</span><span id="line-2820"></span>
-<span class="source-line-no">2821</span><span id="line-2821">  public static ExtendedCell createFirstOnNextRow(final Cell cell) {</span>
-<span class="source-line-no">2822</span><span id="line-2822">    byte[] nextRow = new byte[cell.getRowLength() + 1];</span>
-<span class="source-line-no">2823</span><span id="line-2823">    CellUtil.copyRowTo(cell, nextRow, 0);</span>
-<span class="source-line-no">2824</span><span id="line-2824">    nextRow[nextRow.length - 1] = 0;// maybe not necessary</span>
-<span class="source-line-no">2825</span><span id="line-2825">    return new FirstOnRowCell(nextRow, 0, (short) nextRow.length);</span>
-<span class="source-line-no">2826</span><span id="line-2826">  }</span>
-<span class="source-line-no">2827</span><span id="line-2827"></span>
-<span class="source-line-no">2828</span><span id="line-2828">  /**</span>
-<span class="source-line-no">2829</span><span id="line-2829">   * Create a Cell that is smaller than all other possible Cells for the given Cell's rk:cf and</span>
-<span class="source-line-no">2830</span><span id="line-2830">   * passed qualifier.</span>
-<span class="source-line-no">2831</span><span id="line-2831">   * @return Last possible Cell on passed Cell's rk:cf and passed qualifier.</span>
-<span class="source-line-no">2832</span><span id="line-2832">   */</span>
-<span class="source-line-no">2833</span><span id="line-2833">  public static ExtendedCell createFirstOnRowCol(final Cell cell, byte[] qArray, int qoffest,</span>
-<span class="source-line-no">2834</span><span id="line-2834">    int qlength) {</span>
-<span class="source-line-no">2835</span><span id="line-2835">    if (cell instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">2836</span><span id="line-2836">      return new FirstOnRowColByteBufferExtendedCell(</span>
-<span class="source-line-no">2837</span><span id="line-2837">        ((ByteBufferExtendedCell) cell).getRowByteBuffer(),</span>
-<span class="source-line-no">2838</span><span id="line-2838">        ((ByteBufferExtendedCell) cell).getRowPosition(), cell.getRowLength(),</span>
-<span class="source-line-no">2839</span><span id="line-2839">        ((ByteBufferExtendedCell) cell).getFamilyByteBuffer(),</span>
-<span class="source-line-no">2840</span><span id="line-2840">        ((ByteBufferExtendedCell) cell).getFamilyPosition(), cell.getFamilyLength(),</span>
-<span class="source-line-no">2841</span><span id="line-2841">        ByteBuffer.wrap(qArray), qoffest, qlength);</span>
-<span class="source-line-no">2842</span><span id="line-2842">    }</span>
-<span class="source-line-no">2843</span><span id="line-2843">    return new FirstOnRowColCell(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength(),</span>
-<span class="source-line-no">2844</span><span id="line-2844">      cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength(), qArray, qoffest,</span>
-<span class="source-line-no">2845</span><span id="line-2845">      qlength);</span>
-<span class="source-line-no">2846</span><span id="line-2846">  }</span>
-<span class="source-line-no">2847</span><span id="line-2847"></span>
-<span class="source-line-no">2848</span><span id="line-2848">  /**</span>
-<span class="source-line-no">2849</span><span id="line-2849">   * Creates the first cell with the row/family/qualifier of this cell and the given timestamp. Uses</span>
-<span class="source-line-no">2850</span><span id="line-2850">   * the "maximum" type that guarantees that the new cell is the lowest possible for this</span>
-<span class="source-line-no">2851</span><span id="line-2851">   * combination of row, family, qualifier, and timestamp. This cell's own timestamp is ignored.</span>
-<span class="source-line-no">2852</span><span id="line-2852">   * @param cell - cell</span>
-<span class="source-line-no">2853</span><span id="line-2853">   */</span>
-<span class="source-line-no">2854</span><span id="line-2854">  public static ExtendedCell createFirstOnRowColTS(Cell cell, long ts) {</span>
-<span class="source-line-no">2855</span><span id="line-2855">    if (cell instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">2856</span><span id="line-2856">      return new FirstOnRowColTSByteBufferExtendedCell(</span>
-<span class="source-line-no">2857</span><span id="line-2857">        ((ByteBufferExtendedCell) cell).getRowByteBuffer(),</span>
-<span class="source-line-no">2858</span><span id="line-2858">        ((ByteBufferExtendedCell) cell).getRowPosition(), cell.getRowLength(),</span>
-<span class="source-line-no">2859</span><span id="line-2859">        ((ByteBufferExtendedCell) cell).getFamilyByteBuffer(),</span>
-<span class="source-line-no">2860</span><span id="line-2860">        ((ByteBufferExtendedCell) cell).getFamilyPosition(), cell.getFamilyLength(),</span>
-<span class="source-line-no">2861</span><span id="line-2861">        ((ByteBufferExtendedCell) cell).getQualifierByteBuffer(),</span>
-<span class="source-line-no">2862</span><span id="line-2862">        ((ByteBufferExtendedCell) cell).getQualifierPosition(), cell.getQualifierLength(), ts);</span>
-<span class="source-line-no">2863</span><span id="line-2863">    }</span>
-<span class="source-line-no">2864</span><span id="line-2864">    return new FirstOnRowColTSCell(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength(),</span>
-<span class="source-line-no">2865</span><span id="line-2865">      cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength(),</span>
-<span class="source-line-no">2866</span><span id="line-2866">      cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength(), ts);</span>
-<span class="source-line-no">2867</span><span id="line-2867">  }</span>
-<span class="source-line-no">2868</span><span id="line-2868"></span>
-<span class="source-line-no">2869</span><span id="line-2869">  /**</span>
-<span class="source-line-no">2870</span><span id="line-2870">   * Create a Cell that is larger than all other possible Cells for the given Cell's row.</span>
-<span class="source-line-no">2871</span><span id="line-2871">   * @return Last possible Cell on passed Cell's row.</span>
-<span class="source-line-no">2872</span><span id="line-2872">   */</span>
-<span class="source-line-no">2873</span><span id="line-2873">  public static ExtendedCell createLastOnRow(final Cell cell) {</span>
-<span class="source-line-no">2874</span><span id="line-2874">    if (cell instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">2875</span><span id="line-2875">      return new LastOnRowByteBufferExtendedCell(((ByteBufferExtendedCell) cell).getRowByteBuffer(),</span>
-<span class="source-line-no">2876</span><span id="line-2876">        ((ByteBufferExtendedCell) cell).getRowPosition(), cell.getRowLength());</span>
-<span class="source-line-no">2877</span><span id="line-2877">    }</span>
-<span class="source-line-no">2878</span><span id="line-2878">    return new LastOnRowCell(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength());</span>
-<span class="source-line-no">2879</span><span id="line-2879">  }</span>
-<span class="source-line-no">2880</span><span id="line-2880"></span>
-<span class="source-line-no">2881</span><span id="line-2881">  public static ExtendedCell createLastOnRow(final byte[] row) {</span>
-<span class="source-line-no">2882</span><span id="line-2882">    return new LastOnRowCell(row, 0, (short) row.length);</span>
-<span class="source-line-no">2883</span><span id="line-2883">  }</span>
-<span class="source-line-no">2884</span><span id="line-2884"></span>
-<span class="source-line-no">2885</span><span id="line-2885">  /**</span>
-<span class="source-line-no">2886</span><span id="line-2886">   * Create a Cell that is larger than all other possible Cells for the given Cell's rk:cf:q. Used</span>
-<span class="source-line-no">2887</span><span id="line-2887">   * in creating "fake keys" for the multi-column Bloom filter optimization to skip the row/column</span>
-<span class="source-line-no">2888</span><span id="line-2888">   * we already know is not in the file.</span>
-<span class="source-line-no">2889</span><span id="line-2889">   * @return Last possible Cell on passed Cell's rk:cf:q.</span>
-<span class="source-line-no">2890</span><span id="line-2890">   */</span>
-<span class="source-line-no">2891</span><span id="line-2891">  public static ExtendedCell createLastOnRowCol(final Cell cell) {</span>
-<span class="source-line-no">2892</span><span id="line-2892">    if (cell instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">2893</span><span id="line-2893">      return new LastOnRowColByteBufferExtendedCell(</span>
-<span class="source-line-no">2894</span><span id="line-2894">        ((ByteBufferExtendedCell) cell).getRowByteBuffer(),</span>
-<span class="source-line-no">2895</span><span id="line-2895">        ((ByteBufferExtendedCell) cell).getRowPosition(), cell.getRowLength(),</span>
-<span class="source-line-no">2896</span><span id="line-2896">        ((ByteBufferExtendedCell) cell).getFamilyByteBuffer(),</span>
-<span class="source-line-no">2897</span><span id="line-2897">        ((ByteBufferExtendedCell) cell).getFamilyPosition(), cell.getFamilyLength(),</span>
-<span class="source-line-no">2898</span><span id="line-2898">        ((ByteBufferExtendedCell) cell).getQualifierByteBuffer(),</span>
-<span class="source-line-no">2899</span><span id="line-2899">        ((ByteBufferExtendedCell) cell).getQualifierPosition(), cell.getQualifierLength());</span>
-<span class="source-line-no">2900</span><span id="line-2900">    }</span>
-<span class="source-line-no">2901</span><span id="line-2901">    return new LastOnRowColCell(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength(),</span>
-<span class="source-line-no">2902</span><span id="line-2902">      cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength(),</span>
-<span class="source-line-no">2903</span><span id="line-2903">      cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength());</span>
-<span class="source-line-no">2904</span><span id="line-2904">  }</span>
-<span class="source-line-no">2905</span><span id="line-2905"></span>
-<span class="source-line-no">2906</span><span id="line-2906">  /**</span>
-<span class="source-line-no">2907</span><span id="line-2907">   * Create a Delete Family Cell for the specified row and family that would be smaller than all</span>
-<span class="source-line-no">2908</span><span id="line-2908">   * other possible Delete Family KeyValues that have the same row and family. Used for seeking.</span>
-<span class="source-line-no">2909</span><span id="line-2909">   * @param row - row key (arbitrary byte array)</span>
-<span class="source-line-no">2910</span><span id="line-2910">   * @param fam - family name</span>
-<span class="source-line-no">2911</span><span id="line-2911">   * @return First Delete Family possible key on passed &lt;code&gt;row&lt;/code&gt;.</span>
-<span class="source-line-no">2912</span><span id="line-2912">   */</span>
-<span class="source-line-no">2913</span><span id="line-2913">  public static ExtendedCell createFirstDeleteFamilyCellOnRow(final byte[] row, final byte[] fam) {</span>
-<span class="source-line-no">2914</span><span id="line-2914">    return new FirstOnRowDeleteFamilyCell(row, fam);</span>
-<span class="source-line-no">2915</span><span id="line-2915">  }</span>
-<span class="source-line-no">2916</span><span id="line-2916"></span>
-<span class="source-line-no">2917</span><span id="line-2917">  /**</span>
-<span class="source-line-no">2918</span><span id="line-2918">   * In fact, in HBase, all {@link Cell}s are {@link ExtendedCell}s. We do not expect users to</span>
-<span class="source-line-no">2919</span><span id="line-2919">   * implement their own {@link Cell} types, except some special projects like Phoenix, where they</span>
-<span class="source-line-no">2920</span><span id="line-2920">   * just use {@link org.apache.hadoop.hbase.KeyValue} and {@link ExtendedCell} directly.</span>
-<span class="source-line-no">2921</span><span id="line-2921">   * @return the original {@code cell} which has already been cast to an {@link ExtendedCell}.</span>
-<span class="source-line-no">2922</span><span id="line-2922">   * @throws IllegalArgumentException if the given {@code cell} is not an {@link ExtendedCell}.</span>
-<span class="source-line-no">2923</span><span id="line-2923">   */</span>
-<span class="source-line-no">2924</span><span id="line-2924">  public static ExtendedCell ensureExtendedCell(Cell cell) {</span>
-<span class="source-line-no">2925</span><span id="line-2925">    if (cell == null) {</span>
-<span class="source-line-no">2926</span><span id="line-2926">      return null;</span>
-<span class="source-line-no">2927</span><span id="line-2927">    }</span>
-<span class="source-line-no">2928</span><span id="line-2928">    Preconditions.checkArgument(cell instanceof ExtendedCell, "Unsupported cell type: %s",</span>
-<span class="source-line-no">2929</span><span id="line-2929">      cell.getClass().getName());</span>
-<span class="source-line-no">2930</span><span id="line-2930">    return (ExtendedCell) cell;</span>
-<span class="source-line-no">2931</span><span id="line-2931">  }</span>
-<span class="source-line-no">2932</span><span id="line-2932"></span>
-<span class="source-line-no">2933</span><span id="line-2933">  public static boolean equals(ExtendedCell a, ExtendedCell b) {</span>
-<span class="source-line-no">2934</span><span id="line-2934">    return CellUtil.matchingRows(a, b) &amp;&amp; CellUtil.matchingFamily(a, b)</span>
-<span class="source-line-no">2935</span><span id="line-2935">      &amp;&amp; CellUtil.matchingQualifier(a, b) &amp;&amp; CellUtil.matchingTimestamp(a, b)</span>
-<span class="source-line-no">2936</span><span id="line-2936">      &amp;&amp; PrivateCellUtil.matchingType(a, b);</span>
-<span class="source-line-no">2937</span><span id="line-2937">  }</span>
-<span class="source-line-no">2938</span><span id="line-2938"></span>
-<span class="source-line-no">2939</span><span id="line-2939">  /** Returns ExtendedCellScanner interface over &lt;code&gt;cellIterables&lt;/code&gt; */</span>
-<span class="source-line-no">2940</span><span id="line-2940">  public static ExtendedCellScanner</span>
-<span class="source-line-no">2941</span><span id="line-2941">    createExtendedCellScanner(final List&lt;? extends ExtendedCellScannable&gt; cellScannerables) {</span>
-<span class="source-line-no">2942</span><span id="line-2942">    return new ExtendedCellScanner() {</span>
-<span class="source-line-no">2943</span><span id="line-2943">      private final Iterator&lt;? extends ExtendedCellScannable&gt; iterator =</span>
-<span class="source-line-no">2944</span><span id="line-2944">        cellScannerables.iterator();</span>
-<span class="source-line-no">2945</span><span id="line-2945">      private ExtendedCellScanner cellScanner = null;</span>
-<span class="source-line-no">2946</span><span id="line-2946"></span>
-<span class="source-line-no">2947</span><span id="line-2947">      @Override</span>
-<span class="source-line-no">2948</span><span id="line-2948">      public ExtendedCell current() {</span>
-<span class="source-line-no">2949</span><span id="line-2949">        return this.cellScanner != null ? this.cellScanner.current() : null;</span>
-<span class="source-line-no">2950</span><span id="line-2950">      }</span>
-<span class="source-line-no">2951</span><span id="line-2951"></span>
-<span class="source-line-no">2952</span><span id="line-2952">      @Override</span>
-<span class="source-line-no">2953</span><span id="line-2953">      public boolean advance() throws IOException {</span>
-<span class="source-line-no">2954</span><span id="line-2954">        while (true) {</span>
-<span class="source-line-no">2955</span><span id="line-2955">          if (this.cellScanner == null) {</span>
-<span class="source-line-no">2956</span><span id="line-2956">            if (!this.iterator.hasNext()) {</span>
-<span class="source-line-no">2957</span><span id="line-2957">              return false;</span>
-<span class="source-line-no">2958</span><span id="line-2958">            }</span>
-<span class="source-line-no">2959</span><span id="line-2959">            this.cellScanner = this.iterator.next().cellScanner();</span>
-<span class="source-line-no">2960</span><span id="line-2960">          }</span>
-<span class="source-line-no">2961</span><span id="line-2961">          if (this.cellScanner.advance()) {</span>
-<span class="source-line-no">2962</span><span id="line-2962">            return true;</span>
-<span class="source-line-no">2963</span><span id="line-2963">          }</span>
-<span class="source-line-no">2964</span><span id="line-2964">          this.cellScanner = null;</span>
-<span class="source-line-no">2965</span><span id="line-2965">        }</span>
-<span class="source-line-no">2966</span><span id="line-2966">      }</span>
-<span class="source-line-no">2967</span><span id="line-2967">    };</span>
-<span class="source-line-no">2968</span><span id="line-2968">  }</span>
-<span class="source-line-no">2969</span><span id="line-2969"></span>
-<span class="source-line-no">2970</span><span id="line-2970">  /**</span>
-<span class="source-line-no">2971</span><span id="line-2971">   * Flatten the map of cells out under the ExtendedCellScanner</span>
-<span class="source-line-no">2972</span><span id="line-2972">   * @param map Map of Cell Lists; for example, the map of families to ExtendedCells that is used</span>
-<span class="source-line-no">2973</span><span id="line-2973">   *            inside Put, etc., keeping Cells organized by family.</span>
-<span class="source-line-no">2974</span><span id="line-2974">   * @return ExtendedCellScanner interface over &lt;code&gt;cellIterable&lt;/code&gt;</span>
-<span class="source-line-no">2975</span><span id="line-2975">   */</span>
-<span class="source-line-no">2976</span><span id="line-2976">  public static ExtendedCellScanner</span>
-<span class="source-line-no">2977</span><span id="line-2977">    createExtendedCellScanner(final NavigableMap&lt;byte[], List&lt;ExtendedCell&gt;&gt; map) {</span>
-<span class="source-line-no">2978</span><span id="line-2978">    return new ExtendedCellScanner() {</span>
-<span class="source-line-no">2979</span><span id="line-2979">      private final Iterator&lt;Entry&lt;byte[], List&lt;ExtendedCell&gt;&gt;&gt; entries = map.entrySet().iterator();</span>
-<span class="source-line-no">2980</span><span id="line-2980">      private Iterator&lt;ExtendedCell&gt; currentIterator = null;</span>
-<span class="source-line-no">2981</span><span id="line-2981">      private ExtendedCell currentCell;</span>
-<span class="source-line-no">2982</span><span id="line-2982"></span>
-<span class="source-line-no">2983</span><span id="line-2983">      @Override</span>
-<span class="source-line-no">2984</span><span id="line-2984">      public ExtendedCell current() {</span>
-<span class="source-line-no">2985</span><span id="line-2985">        return this.currentCell;</span>
-<span class="source-line-no">2986</span><span id="line-2986">      }</span>
-<span class="source-line-no">2987</span><span id="line-2987"></span>
-<span class="source-line-no">2988</span><span id="line-2988">      @Override</span>
-<span class="source-line-no">2989</span><span id="line-2989">      public boolean advance() {</span>
-<span class="source-line-no">2990</span><span id="line-2990">        while (true) {</span>
-<span class="source-line-no">2991</span><span id="line-2991">          if (this.currentIterator == null) {</span>
-<span class="source-line-no">2992</span><span id="line-2992">            if (!this.entries.hasNext()) {</span>
-<span class="source-line-no">2993</span><span id="line-2993">              return false;</span>
-<span class="source-line-no">2994</span><span id="line-2994">            }</span>
-<span class="source-line-no">2995</span><span id="line-2995">            this.currentIterator = this.entries.next().getValue().iterator();</span>
-<span class="source-line-no">2996</span><span id="line-2996">          }</span>
-<span class="source-line-no">2997</span><span id="line-2997">          if (this.currentIterator.hasNext()) {</span>
-<span class="source-line-no">2998</span><span id="line-2998">            this.currentCell = this.currentIterator.next();</span>
-<span class="source-line-no">2999</span><span id="line-2999">            return true;</span>
-<span class="source-line-no">3000</span><span id="line-3000">          }</span>
-<span class="source-line-no">3001</span><span id="line-3001">          this.currentCell = null;</span>
-<span class="source-line-no">3002</span><span id="line-3002">          this.currentIterator = null;</span>
-<span class="source-line-no">3003</span><span id="line-3003">        }</span>
-<span class="source-line-no">3004</span><span id="line-3004">      }</span>
-<span class="source-line-no">3005</span><span id="line-3005">    };</span>
-<span class="source-line-no">3006</span><span id="line-3006">  }</span>
-<span class="source-line-no">3007</span><span id="line-3007"></span>
-<span class="source-line-no">3008</span><span id="line-3008">  /** Returns CellScanner interface over &lt;code&gt;cellArray&lt;/code&gt; */</span>
-<span class="source-line-no">3009</span><span id="line-3009">  public static ExtendedCellScanner createExtendedCellScanner(final ExtendedCell[] cellArray) {</span>
-<span class="source-line-no">3010</span><span id="line-3010">    return new ExtendedCellScanner() {</span>
-<span class="source-line-no">3011</span><span id="line-3011">      private final ExtendedCell[] cells = cellArray;</span>
-<span class="source-line-no">3012</span><span id="line-3012">      private int index = -1;</span>
-<span class="source-line-no">3013</span><span id="line-3013"></span>
-<span class="source-line-no">3014</span><span id="line-3014">      @Override</span>
-<span class="source-line-no">3015</span><span id="line-3015">      public ExtendedCell current() {</span>
-<span class="source-line-no">3016</span><span id="line-3016">        if (cells == null) {</span>
-<span class="source-line-no">3017</span><span id="line-3017">          return null;</span>
-<span class="source-line-no">3018</span><span id="line-3018">        }</span>
-<span class="source-line-no">3019</span><span id="line-3019">        return (index &lt; 0) ? null : this.cells[index];</span>
-<span class="source-line-no">3020</span><span id="line-3020">      }</span>
-<span class="source-line-no">3021</span><span id="line-3021"></span>
-<span class="source-line-no">3022</span><span id="line-3022">      @Override</span>
-<span class="source-line-no">3023</span><span id="line-3023">      public boolean advance() {</span>
-<span class="source-line-no">3024</span><span id="line-3024">        if (cells == null) {</span>
-<span class="source-line-no">3025</span><span id="line-3025">          return false;</span>
-<span class="source-line-no">3026</span><span id="line-3026">        }</span>
-<span class="source-line-no">3027</span><span id="line-3027">        return ++index &lt; this.cells.length;</span>
-<span class="source-line-no">3028</span><span id="line-3028">      }</span>
-<span class="source-line-no">3029</span><span id="line-3029">    };</span>
-<span class="source-line-no">3030</span><span id="line-3030">  }</span>
-<span class="source-line-no">3031</span><span id="line-3031"></span>
-<span class="source-line-no">3032</span><span id="line-3032">  /** Returns ExtendedCellScanner interface over &lt;code&gt;cellIterable&lt;/code&gt; */</span>
-<span class="source-line-no">3033</span><span id="line-3033">  public static ExtendedCellScanner</span>
-<span class="source-line-no">3034</span><span id="line-3034">    createExtendedCellScanner(final Iterable&lt;ExtendedCell&gt; cellIterable) {</span>
-<span class="source-line-no">3035</span><span id="line-3035">    if (cellIterable == null) {</span>
-<span class="source-line-no">3036</span><span id="line-3036">      return null;</span>
-<span class="source-line-no">3037</span><span id="line-3037">    }</span>
-<span class="source-line-no">3038</span><span id="line-3038">    return createExtendedCellScanner(cellIterable.iterator());</span>
-<span class="source-line-no">3039</span><span id="line-3039">  }</span>
-<span class="source-line-no">3040</span><span id="line-3040"></span>
-<span class="source-line-no">3041</span><span id="line-3041">  /**</span>
-<span class="source-line-no">3042</span><span id="line-3042">   * Returns ExtendedCellScanner interface over &lt;code&gt;cellIterable&lt;/code&gt; or null if</span>
-<span class="source-line-no">3043</span><span id="line-3043">   * &lt;code&gt;cells&lt;/code&gt; is null</span>
-<span class="source-line-no">3044</span><span id="line-3044">   */</span>
-<span class="source-line-no">3045</span><span id="line-3045">  public static ExtendedCellScanner createExtendedCellScanner(final Iterator&lt;ExtendedCell&gt; cells) {</span>
-<span class="source-line-no">3046</span><span id="line-3046">    if (cells == null) {</span>
-<span class="source-line-no">3047</span><span id="line-3047">      return null;</span>
-<span class="source-line-no">3048</span><span id="line-3048">    }</span>
-<span class="source-line-no">3049</span><span id="line-3049">    return new ExtendedCellScanner() {</span>
-<span class="source-line-no">3050</span><span id="line-3050">      private final Iterator&lt;ExtendedCell&gt; iterator = cells;</span>
-<span class="source-line-no">3051</span><span id="line-3051">      private ExtendedCell current = null;</span>
-<span class="source-line-no">3052</span><span id="line-3052"></span>
-<span class="source-line-no">3053</span><span id="line-3053">      @Override</span>
-<span class="source-line-no">3054</span><span id="line-3054">      public ExtendedCell current() {</span>
-<span class="source-line-no">3055</span><span id="line-3055">        return this.current;</span>
-<span class="source-line-no">3056</span><span id="line-3056">      }</span>
-<span class="source-line-no">3057</span><span id="line-3057"></span>
-<span class="source-line-no">3058</span><span id="line-3058">      @Override</span>
-<span class="source-line-no">3059</span><span id="line-3059">      public boolean advance() {</span>
-<span class="source-line-no">3060</span><span id="line-3060">        boolean hasNext = this.iterator.hasNext();</span>
-<span class="source-line-no">3061</span><span id="line-3061">        this.current = hasNext ? this.iterator.next() : null;</span>
-<span class="source-line-no">3062</span><span id="line-3062">        return hasNext;</span>
-<span class="source-line-no">3063</span><span id="line-3063">      }</span>
-<span class="source-line-no">3064</span><span id="line-3064">    };</span>
-<span class="source-line-no">3065</span><span id="line-3065">  }</span>
-<span class="source-line-no">3066</span><span id="line-3066"></span>
-<span class="source-line-no">3067</span><span id="line-3067">  private static final Cell.Type[] CELL_TYPE_CODE_ARRAY = new Cell.Type[256];</span>
-<span class="source-line-no">3068</span><span id="line-3068"></span>
-<span class="source-line-no">3069</span><span id="line-3069">  static {</span>
-<span class="source-line-no">3070</span><span id="line-3070">    for (Cell.Type t : Cell.Type.values()) {</span>
-<span class="source-line-no">3071</span><span id="line-3071">      CELL_TYPE_CODE_ARRAY[t.getCode() &amp; 0xff] = t;</span>
-<span class="source-line-no">3072</span><span id="line-3072">    }</span>
-<span class="source-line-no">3073</span><span id="line-3073">  }</span>
-<span class="source-line-no">3074</span><span id="line-3074"></span>
-<span class="source-line-no">3075</span><span id="line-3075">  public static Cell.Type code2Type(byte code) {</span>
-<span class="source-line-no">3076</span><span id="line-3076">    Cell.Type t = CELL_TYPE_CODE_ARRAY[code &amp; 0xff];</span>
-<span class="source-line-no">3077</span><span id="line-3077">    if (t != null) {</span>
-<span class="source-line-no">3078</span><span id="line-3078">      return t;</span>
-<span class="source-line-no">3079</span><span id="line-3079">    }</span>
-<span class="source-line-no">3080</span><span id="line-3080">    throw new UnsupportedOperationException("Invalid type of cell " + code);</span>
-<span class="source-line-no">3081</span><span id="line-3081">  }</span>
-<span class="source-line-no">3082</span><span id="line-3082"></span>
-<span class="source-line-no">3083</span><span id="line-3083">  public static byte getTypeByte(Cell c) {</span>
-<span class="source-line-no">3084</span><span id="line-3084">    if (c instanceof ExtendedCell) {</span>
-<span class="source-line-no">3085</span><span id="line-3085">      return ((ExtendedCell) c).getTypeByte();</span>
-<span class="source-line-no">3086</span><span id="line-3086">    } else {</span>
-<span class="source-line-no">3087</span><span id="line-3087">      return c.getType().getCode();</span>
-<span class="source-line-no">3088</span><span id="line-3088">    }</span>
-<span class="source-line-no">3089</span><span id="line-3089">  }</span>
-<span class="source-line-no">3090</span><span id="line-3090"></span>
-<span class="source-line-no">3091</span><span id="line-3091">  public static long getSequenceId(Cell c) {</span>
-<span class="source-line-no">3092</span><span id="line-3092">    if (c instanceof ExtendedCell) {</span>
-<span class="source-line-no">3093</span><span id="line-3093">      return ((ExtendedCell) c).getSequenceId();</span>
-<span class="source-line-no">3094</span><span id="line-3094">    } else {</span>
-<span class="source-line-no">3095</span><span id="line-3095">      return HConstants.NO_SEQNUM;</span>
-<span class="source-line-no">3096</span><span id="line-3096">    }</span>
-<span class="source-line-no">3097</span><span id="line-3097">  }</span>
-<span class="source-line-no">3098</span><span id="line-3098">}</span>
+<span class="source-line-no">030</span><span id="line-30">import java.util.Arrays;</span>
+<span class="source-line-no">031</span><span id="line-31">import java.util.Iterator;</span>
+<span class="source-line-no">032</span><span id="line-32">import java.util.List;</span>
+<span class="source-line-no">033</span><span id="line-33">import java.util.Map.Entry;</span>
+<span class="source-line-no">034</span><span id="line-34">import java.util.NavigableMap;</span>
+<span class="source-line-no">035</span><span id="line-35">import java.util.Optional;</span>
+<span class="source-line-no">036</span><span id="line-36">import org.apache.hadoop.hbase.filter.ByteArrayComparable;</span>
+<span class="source-line-no">037</span><span id="line-37">import org.apache.hadoop.hbase.io.TagCompressionContext;</span>
+<span class="source-line-no">038</span><span id="line-38">import org.apache.hadoop.hbase.io.util.Dictionary;</span>
+<span class="source-line-no">039</span><span id="line-39">import org.apache.hadoop.hbase.io.util.StreamUtils;</span>
+<span class="source-line-no">040</span><span id="line-40">import org.apache.hadoop.hbase.util.ByteBufferUtils;</span>
+<span class="source-line-no">041</span><span id="line-41">import org.apache.hadoop.hbase.util.ByteRange;</span>
+<span class="source-line-no">042</span><span id="line-42">import org.apache.hadoop.hbase.util.Bytes;</span>
+<span class="source-line-no">043</span><span id="line-43">import org.apache.hadoop.hbase.util.ClassSize;</span>
+<span class="source-line-no">044</span><span id="line-44">import org.apache.yetus.audience.InterfaceAudience;</span>
+<span class="source-line-no">045</span><span id="line-45"></span>
+<span class="source-line-no">046</span><span id="line-46">import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;</span>
+<span class="source-line-no">047</span><span id="line-47"></span>
+<span class="source-line-no">048</span><span id="line-48">/**</span>
+<span class="source-line-no">049</span><span id="line-49"> * Utility methods helpful slinging {@link Cell} instances. It has more powerful and rich set of</span>
+<span class="source-line-no">050</span><span id="line-50"> * APIs than those in {@link CellUtil} for internal usage.</span>
+<span class="source-line-no">051</span><span id="line-51"> */</span>
+<span class="source-line-no">052</span><span id="line-52">@InterfaceAudience.Private</span>
+<span class="source-line-no">053</span><span id="line-53">public final class PrivateCellUtil {</span>
+<span class="source-line-no">054</span><span id="line-54"></span>
+<span class="source-line-no">055</span><span id="line-55">  /**</span>
+<span class="source-line-no">056</span><span id="line-56">   * Private constructor to keep this class from being instantiated.</span>
+<span class="source-line-no">057</span><span id="line-57">   */</span>
+<span class="source-line-no">058</span><span id="line-58">  private PrivateCellUtil() {</span>
+<span class="source-line-no">059</span><span id="line-59">  }</span>
+<span class="source-line-no">060</span><span id="line-60"></span>
+<span class="source-line-no">061</span><span id="line-61">  /******************* ByteRange *******************************/</span>
+<span class="source-line-no">062</span><span id="line-62"></span>
+<span class="source-line-no">063</span><span id="line-63">  public static ByteRange fillRowRange(Cell cell, ByteRange range) {</span>
+<span class="source-line-no">064</span><span id="line-64">    return range.set(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength());</span>
+<span class="source-line-no">065</span><span id="line-65">  }</span>
+<span class="source-line-no">066</span><span id="line-66"></span>
+<span class="source-line-no">067</span><span id="line-67">  public static ByteRange fillFamilyRange(Cell cell, ByteRange range) {</span>
+<span class="source-line-no">068</span><span id="line-68">    return range.set(cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength());</span>
+<span class="source-line-no">069</span><span id="line-69">  }</span>
+<span class="source-line-no">070</span><span id="line-70"></span>
+<span class="source-line-no">071</span><span id="line-71">  public static ByteRange fillQualifierRange(Cell cell, ByteRange range) {</span>
+<span class="source-line-no">072</span><span id="line-72">    return range.set(cell.getQualifierArray(), cell.getQualifierOffset(),</span>
+<span class="source-line-no">073</span><span id="line-73">      cell.getQualifierLength());</span>
+<span class="source-line-no">074</span><span id="line-74">  }</span>
+<span class="source-line-no">075</span><span id="line-75"></span>
+<span class="source-line-no">076</span><span id="line-76">  public static ByteRange fillValueRange(Cell cell, ByteRange range) {</span>
+<span class="source-line-no">077</span><span id="line-77">    return range.set(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());</span>
+<span class="source-line-no">078</span><span id="line-78">  }</span>
+<span class="source-line-no">079</span><span id="line-79"></span>
+<span class="source-line-no">080</span><span id="line-80">  public static ByteRange fillTagRange(ExtendedCell cell, ByteRange range) {</span>
+<span class="source-line-no">081</span><span id="line-81">    return range.set(cell.getTagsArray(), cell.getTagsOffset(), cell.getTagsLength());</span>
+<span class="source-line-no">082</span><span id="line-82">  }</span>
+<span class="source-line-no">083</span><span id="line-83"></span>
+<span class="source-line-no">084</span><span id="line-84">  /********************* misc *************************************/</span>
+<span class="source-line-no">085</span><span id="line-85"></span>
+<span class="source-line-no">086</span><span id="line-86">  public static byte getRowByte(Cell cell, int index) {</span>
+<span class="source-line-no">087</span><span id="line-87">    if (cell instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">088</span><span id="line-88">      return ((ByteBufferExtendedCell) cell).getRowByteBuffer()</span>
+<span class="source-line-no">089</span><span id="line-89">        .get(((ByteBufferExtendedCell) cell).getRowPosition() + index);</span>
+<span class="source-line-no">090</span><span id="line-90">    }</span>
+<span class="source-line-no">091</span><span id="line-91">    return cell.getRowArray()[cell.getRowOffset() + index];</span>
+<span class="source-line-no">092</span><span id="line-92">  }</span>
+<span class="source-line-no">093</span><span id="line-93"></span>
+<span class="source-line-no">094</span><span id="line-94">  public static byte getQualifierByte(Cell cell, int index) {</span>
+<span class="source-line-no">095</span><span id="line-95">    if (cell instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">096</span><span id="line-96">      return ((ByteBufferExtendedCell) cell).getQualifierByteBuffer()</span>
+<span class="source-line-no">097</span><span id="line-97">        .get(((ByteBufferExtendedCell) cell).getQualifierPosition() + index);</span>
+<span class="source-line-no">098</span><span id="line-98">    }</span>
+<span class="source-line-no">099</span><span id="line-99">    return cell.getQualifierArray()[cell.getQualifierOffset() + index];</span>
+<span class="source-line-no">100</span><span id="line-100">  }</span>
+<span class="source-line-no">101</span><span id="line-101"></span>
+<span class="source-line-no">102</span><span id="line-102">  public static ByteBuffer getValueBufferShallowCopy(Cell cell) {</span>
+<span class="source-line-no">103</span><span id="line-103">    ByteBuffer buffer =</span>
+<span class="source-line-no">104</span><span id="line-104">      ByteBuffer.wrap(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());</span>
+<span class="source-line-no">105</span><span id="line-105">    return buffer;</span>
+<span class="source-line-no">106</span><span id="line-106">  }</span>
+<span class="source-line-no">107</span><span id="line-107"></span>
+<span class="source-line-no">108</span><span id="line-108">  /** Returns A new cell which is having the extra tags also added to it. */</span>
+<span class="source-line-no">109</span><span id="line-109">  public static ExtendedCell createCell(ExtendedCell cell, List&lt;Tag&gt; tags) {</span>
+<span class="source-line-no">110</span><span id="line-110">    return createCell(cell, TagUtil.fromList(tags));</span>
+<span class="source-line-no">111</span><span id="line-111">  }</span>
+<span class="source-line-no">112</span><span id="line-112"></span>
+<span class="source-line-no">113</span><span id="line-113">  /** Returns A new cell which is having the extra tags also added to it. */</span>
+<span class="source-line-no">114</span><span id="line-114">  public static ExtendedCell createCell(ExtendedCell cell, byte[] tags) {</span>
+<span class="source-line-no">115</span><span id="line-115">    if (cell instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">116</span><span id="line-116">      return new TagRewriteByteBufferExtendedCell((ByteBufferExtendedCell) cell, tags);</span>
+<span class="source-line-no">117</span><span id="line-117">    }</span>
+<span class="source-line-no">118</span><span id="line-118">    return new TagRewriteCell(cell, tags);</span>
+<span class="source-line-no">119</span><span id="line-119">  }</span>
+<span class="source-line-no">120</span><span id="line-120"></span>
+<span class="source-line-no">121</span><span id="line-121">  public static ExtendedCell createCell(ExtendedCell cell, byte[] value, byte[] tags) {</span>
+<span class="source-line-no">122</span><span id="line-122">    if (cell instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">123</span><span id="line-123">      return new ValueAndTagRewriteByteBufferExtendedCell((ByteBufferExtendedCell) cell, value,</span>
+<span class="source-line-no">124</span><span id="line-124">        tags);</span>
+<span class="source-line-no">125</span><span id="line-125">    }</span>
+<span class="source-line-no">126</span><span id="line-126">    return new ValueAndTagRewriteCell(cell, value, tags);</span>
+<span class="source-line-no">127</span><span id="line-127">  }</span>
+<span class="source-line-no">128</span><span id="line-128"></span>
+<span class="source-line-no">129</span><span id="line-129">  /**</span>
+<span class="source-line-no">130</span><span id="line-130">   * This can be used when a Cell has to change with addition/removal of one or more tags. This is</span>
+<span class="source-line-no">131</span><span id="line-131">   * an efficient way to do so in which only the tags bytes part need to recreated and copied. All</span>
+<span class="source-line-no">132</span><span id="line-132">   * other parts, refer to the original Cell.</span>
+<span class="source-line-no">133</span><span id="line-133">   */</span>
+<span class="source-line-no">134</span><span id="line-134">  static class TagRewriteCell implements ExtendedCell {</span>
+<span class="source-line-no">135</span><span id="line-135">    protected ExtendedCell cell;</span>
+<span class="source-line-no">136</span><span id="line-136">    protected byte[] tags;</span>
+<span class="source-line-no">137</span><span id="line-137">    private static final int HEAP_SIZE_OVERHEAD = ClassSize.OBJECT + 2 * ClassSize.REFERENCE;</span>
+<span class="source-line-no">138</span><span id="line-138"></span>
+<span class="source-line-no">139</span><span id="line-139">    /**</span>
+<span class="source-line-no">140</span><span id="line-140">     * Construct a TagRewriteCell</span>
+<span class="source-line-no">141</span><span id="line-141">     * @param cell The original Cell which it rewrites</span>
+<span class="source-line-no">142</span><span id="line-142">     * @param tags the tags bytes. The array suppose to contain the tags bytes alone.</span>
+<span class="source-line-no">143</span><span id="line-143">     */</span>
+<span class="source-line-no">144</span><span id="line-144">    public TagRewriteCell(ExtendedCell cell, byte[] tags) {</span>
+<span class="source-line-no">145</span><span id="line-145">      assert tags != null;</span>
+<span class="source-line-no">146</span><span id="line-146">      this.cell = cell;</span>
+<span class="source-line-no">147</span><span id="line-147">      this.tags = tags;</span>
+<span class="source-line-no">148</span><span id="line-148">      // tag offset will be treated as 0 and length this.tags.length</span>
+<span class="source-line-no">149</span><span id="line-149">      if (this.cell instanceof TagRewriteCell) {</span>
+<span class="source-line-no">150</span><span id="line-150">        // Cleaning the ref so that the byte[] can be GCed</span>
+<span class="source-line-no">151</span><span id="line-151">        ((TagRewriteCell) this.cell).tags = null;</span>
+<span class="source-line-no">152</span><span id="line-152">      }</span>
+<span class="source-line-no">153</span><span id="line-153">    }</span>
+<span class="source-line-no">154</span><span id="line-154"></span>
+<span class="source-line-no">155</span><span id="line-155">    @Override</span>
+<span class="source-line-no">156</span><span id="line-156">    public byte[] getRowArray() {</span>
+<span class="source-line-no">157</span><span id="line-157">      return cell.getRowArray();</span>
+<span class="source-line-no">158</span><span id="line-158">    }</span>
+<span class="source-line-no">159</span><span id="line-159"></span>
+<span class="source-line-no">160</span><span id="line-160">    @Override</span>
+<span class="source-line-no">161</span><span id="line-161">    public int getRowOffset() {</span>
+<span class="source-line-no">162</span><span id="line-162">      return cell.getRowOffset();</span>
+<span class="source-line-no">163</span><span id="line-163">    }</span>
+<span class="source-line-no">164</span><span id="line-164"></span>
+<span class="source-line-no">165</span><span id="line-165">    @Override</span>
+<span class="source-line-no">166</span><span id="line-166">    public short getRowLength() {</span>
+<span class="source-line-no">167</span><span id="line-167">      return cell.getRowLength();</span>
+<span class="source-line-no">168</span><span id="line-168">    }</span>
+<span class="source-line-no">169</span><span id="line-169"></span>
+<span class="source-line-no">170</span><span id="line-170">    @Override</span>
+<span class="source-line-no">171</span><span id="line-171">    public byte[] getFamilyArray() {</span>
+<span class="source-line-no">172</span><span id="line-172">      return cell.getFamilyArray();</span>
+<span class="source-line-no">173</span><span id="line-173">    }</span>
+<span class="source-line-no">174</span><span id="line-174"></span>
+<span class="source-line-no">175</span><span id="line-175">    @Override</span>
+<span class="source-line-no">176</span><span id="line-176">    public int getFamilyOffset() {</span>
+<span class="source-line-no">177</span><span id="line-177">      return cell.getFamilyOffset();</span>
+<span class="source-line-no">178</span><span id="line-178">    }</span>
+<span class="source-line-no">179</span><span id="line-179"></span>
+<span class="source-line-no">180</span><span id="line-180">    @Override</span>
+<span class="source-line-no">181</span><span id="line-181">    public byte getFamilyLength() {</span>
+<span class="source-line-no">182</span><span id="line-182">      return cell.getFamilyLength();</span>
+<span class="source-line-no">183</span><span id="line-183">    }</span>
+<span class="source-line-no">184</span><span id="line-184"></span>
+<span class="source-line-no">185</span><span id="line-185">    @Override</span>
+<span class="source-line-no">186</span><span id="line-186">    public byte[] getQualifierArray() {</span>
+<span class="source-line-no">187</span><span id="line-187">      return cell.getQualifierArray();</span>
+<span class="source-line-no">188</span><span id="line-188">    }</span>
+<span class="source-line-no">189</span><span id="line-189"></span>
+<span class="source-line-no">190</span><span id="line-190">    @Override</span>
+<span class="source-line-no">191</span><span id="line-191">    public int getQualifierOffset() {</span>
+<span class="source-line-no">192</span><span id="line-192">      return cell.getQualifierOffset();</span>
+<span class="source-line-no">193</span><span id="line-193">    }</span>
+<span class="source-line-no">194</span><span id="line-194"></span>
+<span class="source-line-no">195</span><span id="line-195">    @Override</span>
+<span class="source-line-no">196</span><span id="line-196">    public int getQualifierLength() {</span>
+<span class="source-line-no">197</span><span id="line-197">      return cell.getQualifierLength();</span>
+<span class="source-line-no">198</span><span id="line-198">    }</span>
+<span class="source-line-no">199</span><span id="line-199"></span>
+<span class="source-line-no">200</span><span id="line-200">    @Override</span>
+<span class="source-line-no">201</span><span id="line-201">    public long getTimestamp() {</span>
+<span class="source-line-no">202</span><span id="line-202">      return cell.getTimestamp();</span>
+<span class="source-line-no">203</span><span id="line-203">    }</span>
+<span class="source-line-no">204</span><span id="line-204"></span>
+<span class="source-line-no">205</span><span id="line-205">    @Override</span>
+<span class="source-line-no">206</span><span id="line-206">    public byte getTypeByte() {</span>
+<span class="source-line-no">207</span><span id="line-207">      return cell.getTypeByte();</span>
+<span class="source-line-no">208</span><span id="line-208">    }</span>
+<span class="source-line-no">209</span><span id="line-209"></span>
+<span class="source-line-no">210</span><span id="line-210">    @Override</span>
+<span class="source-line-no">211</span><span id="line-211">    public long getSequenceId() {</span>
+<span class="source-line-no">212</span><span id="line-212">      return cell.getSequenceId();</span>
+<span class="source-line-no">213</span><span id="line-213">    }</span>
+<span class="source-line-no">214</span><span id="line-214"></span>
+<span class="source-line-no">215</span><span id="line-215">    @Override</span>
+<span class="source-line-no">216</span><span id="line-216">    public byte[] getValueArray() {</span>
+<span class="source-line-no">217</span><span id="line-217">      return cell.getValueArray();</span>
+<span class="source-line-no">218</span><span id="line-218">    }</span>
+<span class="source-line-no">219</span><span id="line-219"></span>
+<span class="source-line-no">220</span><span id="line-220">    @Override</span>
+<span class="source-line-no">221</span><span id="line-221">    public int getValueOffset() {</span>
+<span class="source-line-no">222</span><span id="line-222">      return cell.getValueOffset();</span>
+<span class="source-line-no">223</span><span id="line-223">    }</span>
+<span class="source-line-no">224</span><span id="line-224"></span>
+<span class="source-line-no">225</span><span id="line-225">    @Override</span>
+<span class="source-line-no">226</span><span id="line-226">    public int getValueLength() {</span>
+<span class="source-line-no">227</span><span id="line-227">      return cell.getValueLength();</span>
+<span class="source-line-no">228</span><span id="line-228">    }</span>
+<span class="source-line-no">229</span><span id="line-229"></span>
+<span class="source-line-no">230</span><span id="line-230">    @Override</span>
+<span class="source-line-no">231</span><span id="line-231">    public byte[] getTagsArray() {</span>
+<span class="source-line-no">232</span><span id="line-232">      return this.tags;</span>
+<span class="source-line-no">233</span><span id="line-233">    }</span>
+<span class="source-line-no">234</span><span id="line-234"></span>
+<span class="source-line-no">235</span><span id="line-235">    @Override</span>
+<span class="source-line-no">236</span><span id="line-236">    public int getTagsOffset() {</span>
+<span class="source-line-no">237</span><span id="line-237">      return 0;</span>
+<span class="source-line-no">238</span><span id="line-238">    }</span>
+<span class="source-line-no">239</span><span id="line-239"></span>
+<span class="source-line-no">240</span><span id="line-240">    @Override</span>
+<span class="source-line-no">241</span><span id="line-241">    public int getTagsLength() {</span>
+<span class="source-line-no">242</span><span id="line-242">      if (null == this.tags) {</span>
+<span class="source-line-no">243</span><span id="line-243">        // Nulled out tags array optimization in constructor</span>
+<span class="source-line-no">244</span><span id="line-244">        return 0;</span>
+<span class="source-line-no">245</span><span id="line-245">      }</span>
+<span class="source-line-no">246</span><span id="line-246">      return this.tags.length;</span>
+<span class="source-line-no">247</span><span id="line-247">    }</span>
+<span class="source-line-no">248</span><span id="line-248"></span>
+<span class="source-line-no">249</span><span id="line-249">    @Override</span>
+<span class="source-line-no">250</span><span id="line-250">    public long heapSize() {</span>
+<span class="source-line-no">251</span><span id="line-251">      long sum = HEAP_SIZE_OVERHEAD + cell.heapSize();</span>
+<span class="source-line-no">252</span><span id="line-252">      if (this.tags != null) {</span>
+<span class="source-line-no">253</span><span id="line-253">        sum += ClassSize.sizeOf(this.tags);</span>
+<span class="source-line-no">254</span><span id="line-254">      }</span>
+<span class="source-line-no">255</span><span id="line-255">      return sum;</span>
+<span class="source-line-no">256</span><span id="line-256">    }</span>
+<span class="source-line-no">257</span><span id="line-257"></span>
+<span class="source-line-no">258</span><span id="line-258">    @Override</span>
+<span class="source-line-no">259</span><span id="line-259">    public void setTimestamp(long ts) throws IOException {</span>
+<span class="source-line-no">260</span><span id="line-260">      // The incoming cell is supposed to be ExtendedCell type.</span>
+<span class="source-line-no">261</span><span id="line-261">      PrivateCellUtil.setTimestamp(cell, ts);</span>
+<span class="source-line-no">262</span><span id="line-262">    }</span>
+<span class="source-line-no">263</span><span id="line-263"></span>
+<span class="source-line-no">264</span><span id="line-264">    @Override</span>
+<span class="source-line-no">265</span><span id="line-265">    public void setTimestamp(byte[] ts) throws IOException {</span>
+<span class="source-line-no">266</span><span id="line-266">      // The incoming cell is supposed to be ExtendedCell type.</span>
+<span class="source-line-no">267</span><span id="line-267">      PrivateCellUtil.setTimestamp(cell, ts);</span>
+<span class="source-line-no">268</span><span id="line-268">    }</span>
+<span class="source-line-no">269</span><span id="line-269"></span>
+<span class="source-line-no">270</span><span id="line-270">    @Override</span>
+<span class="source-line-no">271</span><span id="line-271">    public void setSequenceId(long seqId) throws IOException {</span>
+<span class="source-line-no">272</span><span id="line-272">      // The incoming cell is supposed to be ExtendedCell type.</span>
+<span class="source-line-no">273</span><span id="line-273">      PrivateCellUtil.setSequenceId(cell, seqId);</span>
+<span class="source-line-no">274</span><span id="line-274">    }</span>
+<span class="source-line-no">275</span><span id="line-275"></span>
+<span class="source-line-no">276</span><span id="line-276">    @Override</span>
+<span class="source-line-no">277</span><span id="line-277">    public int write(OutputStream out, boolean withTags) throws IOException {</span>
+<span class="source-line-no">278</span><span id="line-278">      int len = ((ExtendedCell) this.cell).write(out, false);</span>
+<span class="source-line-no">279</span><span id="line-279">      if (withTags &amp;&amp; this.tags != null) {</span>
+<span class="source-line-no">280</span><span id="line-280">        // Write the tagsLength 2 bytes</span>
+<span class="source-line-no">281</span><span id="line-281">        out.write((byte) (0xff &amp; (this.tags.length &gt;&gt; 8)));</span>
+<span class="source-line-no">282</span><span id="line-282">        out.write((byte) (0xff &amp; this.tags.length));</span>
+<span class="source-line-no">283</span><span id="line-283">        out.write(this.tags);</span>
+<span class="source-line-no">284</span><span id="line-284">        len += KeyValue.TAGS_LENGTH_SIZE + this.tags.length;</span>
+<span class="source-line-no">285</span><span id="line-285">      }</span>
+<span class="source-line-no">286</span><span id="line-286">      return len;</span>
+<span class="source-line-no">287</span><span id="line-287">    }</span>
+<span class="source-line-no">288</span><span id="line-288"></span>
+<span class="source-line-no">289</span><span id="line-289">    @Override</span>
+<span class="source-line-no">290</span><span id="line-290">    public int getSerializedSize(boolean withTags) {</span>
+<span class="source-line-no">291</span><span id="line-291">      int len = ((ExtendedCell) this.cell).getSerializedSize(false);</span>
+<span class="source-line-no">292</span><span id="line-292">      if (withTags &amp;&amp; this.tags != null) {</span>
+<span class="source-line-no">293</span><span id="line-293">        len += KeyValue.TAGS_LENGTH_SIZE + this.tags.length;</span>
+<span class="source-line-no">294</span><span id="line-294">      }</span>
+<span class="source-line-no">295</span><span id="line-295">      return len;</span>
+<span class="source-line-no">296</span><span id="line-296">    }</span>
+<span class="source-line-no">297</span><span id="line-297"></span>
+<span class="source-line-no">298</span><span id="line-298">    @Override</span>
+<span class="source-line-no">299</span><span id="line-299">    public void write(ByteBuffer buf, int offset) {</span>
+<span class="source-line-no">300</span><span id="line-300">      offset = KeyValueUtil.appendTo(this.cell, buf, offset, false);</span>
+<span class="source-line-no">301</span><span id="line-301">      int tagsLen = this.tags == null ? 0 : this.tags.length;</span>
+<span class="source-line-no">302</span><span id="line-302">      if (tagsLen &gt; 0) {</span>
+<span class="source-line-no">303</span><span id="line-303">        offset = ByteBufferUtils.putAsShort(buf, offset, tagsLen);</span>
+<span class="source-line-no">304</span><span id="line-304">        ByteBufferUtils.copyFromArrayToBuffer(buf, offset, this.tags, 0, tagsLen);</span>
+<span class="source-line-no">305</span><span id="line-305">      }</span>
+<span class="source-line-no">306</span><span id="line-306">    }</span>
+<span class="source-line-no">307</span><span id="line-307"></span>
+<span class="source-line-no">308</span><span id="line-308">    @Override</span>
+<span class="source-line-no">309</span><span id="line-309">    public ExtendedCell deepClone() {</span>
+<span class="source-line-no">310</span><span id="line-310">      ExtendedCell clonedBaseCell = this.cell.deepClone();</span>
+<span class="source-line-no">311</span><span id="line-311">      return new TagRewriteCell(clonedBaseCell, this.tags);</span>
+<span class="source-line-no">312</span><span id="line-312">    }</span>
+<span class="source-line-no">313</span><span id="line-313">  }</span>
+<span class="source-line-no">314</span><span id="line-314"></span>
+<span class="source-line-no">315</span><span id="line-315">  static class TagRewriteByteBufferExtendedCell extends ByteBufferExtendedCell {</span>
+<span class="source-line-no">316</span><span id="line-316"></span>
+<span class="source-line-no">317</span><span id="line-317">    protected ByteBufferExtendedCell cell;</span>
+<span class="source-line-no">318</span><span id="line-318">    protected byte[] tags;</span>
+<span class="source-line-no">319</span><span id="line-319">    private static final int HEAP_SIZE_OVERHEAD = ClassSize.OBJECT + 2 * ClassSize.REFERENCE;</span>
+<span class="source-line-no">320</span><span id="line-320"></span>
+<span class="source-line-no">321</span><span id="line-321">    /**</span>
+<span class="source-line-no">322</span><span id="line-322">     * @param cell The original ByteBufferExtendedCell which it rewrites</span>
+<span class="source-line-no">323</span><span id="line-323">     * @param tags the tags bytes. The array suppose to contain the tags bytes alone.</span>
+<span class="source-line-no">324</span><span id="line-324">     */</span>
+<span class="source-line-no">325</span><span id="line-325">    public TagRewriteByteBufferExtendedCell(ByteBufferExtendedCell cell, byte[] tags) {</span>
+<span class="source-line-no">326</span><span id="line-326">      assert tags != null;</span>
+<span class="source-line-no">327</span><span id="line-327">      this.cell = cell;</span>
+<span class="source-line-no">328</span><span id="line-328">      this.tags = tags;</span>
+<span class="source-line-no">329</span><span id="line-329">      // tag offset will be treated as 0 and length this.tags.length</span>
+<span class="source-line-no">330</span><span id="line-330">      if (this.cell instanceof TagRewriteByteBufferExtendedCell) {</span>
+<span class="source-line-no">331</span><span id="line-331">        // Cleaning the ref so that the byte[] can be GCed</span>
+<span class="source-line-no">332</span><span id="line-332">        ((TagRewriteByteBufferExtendedCell) this.cell).tags = null;</span>
+<span class="source-line-no">333</span><span id="line-333">      }</span>
+<span class="source-line-no">334</span><span id="line-334">    }</span>
+<span class="source-line-no">335</span><span id="line-335"></span>
+<span class="source-line-no">336</span><span id="line-336">    @Override</span>
+<span class="source-line-no">337</span><span id="line-337">    public byte[] getRowArray() {</span>
+<span class="source-line-no">338</span><span id="line-338">      return this.cell.getRowArray();</span>
+<span class="source-line-no">339</span><span id="line-339">    }</span>
+<span class="source-line-no">340</span><span id="line-340"></span>
+<span class="source-line-no">341</span><span id="line-341">    @Override</span>
+<span class="source-line-no">342</span><span id="line-342">    public int getRowOffset() {</span>
+<span class="source-line-no">343</span><span id="line-343">      return this.cell.getRowOffset();</span>
+<span class="source-line-no">344</span><span id="line-344">    }</span>
+<span class="source-line-no">345</span><span id="line-345"></span>
+<span class="source-line-no">346</span><span id="line-346">    @Override</span>
+<span class="source-line-no">347</span><span id="line-347">    public short getRowLength() {</span>
+<span class="source-line-no">348</span><span id="line-348">      return this.cell.getRowLength();</span>
+<span class="source-line-no">349</span><span id="line-349">    }</span>
+<span class="source-line-no">350</span><span id="line-350"></span>
+<span class="source-line-no">351</span><span id="line-351">    @Override</span>
+<span class="source-line-no">352</span><span id="line-352">    public byte[] getFamilyArray() {</span>
+<span class="source-line-no">353</span><span id="line-353">      return this.cell.getFamilyArray();</span>
+<span class="source-line-no">354</span><span id="line-354">    }</span>
+<span class="source-line-no">355</span><span id="line-355"></span>
+<span class="source-line-no">356</span><span id="line-356">    @Override</span>
+<span class="source-line-no">357</span><span id="line-357">    public int getFamilyOffset() {</span>
+<span class="source-line-no">358</span><span id="line-358">      return this.cell.getFamilyOffset();</span>
+<span class="source-line-no">359</span><span id="line-359">    }</span>
+<span class="source-line-no">360</span><span id="line-360"></span>
+<span class="source-line-no">361</span><span id="line-361">    @Override</span>
+<span class="source-line-no">362</span><span id="line-362">    public byte getFamilyLength() {</span>
+<span class="source-line-no">363</span><span id="line-363">      return this.cell.getFamilyLength();</span>
+<span class="source-line-no">364</span><span id="line-364">    }</span>
+<span class="source-line-no">365</span><span id="line-365"></span>
+<span class="source-line-no">366</span><span id="line-366">    @Override</span>
+<span class="source-line-no">367</span><span id="line-367">    public byte[] getQualifierArray() {</span>
+<span class="source-line-no">368</span><span id="line-368">      return this.cell.getQualifierArray();</span>
+<span class="source-line-no">369</span><span id="line-369">    }</span>
+<span class="source-line-no">370</span><span id="line-370"></span>
+<span class="source-line-no">371</span><span id="line-371">    @Override</span>
+<span class="source-line-no">372</span><span id="line-372">    public int getQualifierOffset() {</span>
+<span class="source-line-no">373</span><span id="line-373">      return this.cell.getQualifierOffset();</span>
+<span class="source-line-no">374</span><span id="line-374">    }</span>
+<span class="source-line-no">375</span><span id="line-375"></span>
+<span class="source-line-no">376</span><span id="line-376">    @Override</span>
+<span class="source-line-no">377</span><span id="line-377">    public int getQualifierLength() {</span>
+<span class="source-line-no">378</span><span id="line-378">      return this.cell.getQualifierLength();</span>
+<span class="source-line-no">379</span><span id="line-379">    }</span>
+<span class="source-line-no">380</span><span id="line-380"></span>
+<span class="source-line-no">381</span><span id="line-381">    @Override</span>
+<span class="source-line-no">382</span><span id="line-382">    public long getTimestamp() {</span>
+<span class="source-line-no">383</span><span id="line-383">      return this.cell.getTimestamp();</span>
+<span class="source-line-no">384</span><span id="line-384">    }</span>
+<span class="source-line-no">385</span><span id="line-385"></span>
+<span class="source-line-no">386</span><span id="line-386">    @Override</span>
+<span class="source-line-no">387</span><span id="line-387">    public byte getTypeByte() {</span>
+<span class="source-line-no">388</span><span id="line-388">      return this.cell.getTypeByte();</span>
+<span class="source-line-no">389</span><span id="line-389">    }</span>
+<span class="source-line-no">390</span><span id="line-390"></span>
+<span class="source-line-no">391</span><span id="line-391">    @Override</span>
+<span class="source-line-no">392</span><span id="line-392">    public long getSequenceId() {</span>
+<span class="source-line-no">393</span><span id="line-393">      return this.cell.getSequenceId();</span>
+<span class="source-line-no">394</span><span id="line-394">    }</span>
+<span class="source-line-no">395</span><span id="line-395"></span>
+<span class="source-line-no">396</span><span id="line-396">    @Override</span>
+<span class="source-line-no">397</span><span id="line-397">    public byte[] getValueArray() {</span>
+<span class="source-line-no">398</span><span id="line-398">      return this.cell.getValueArray();</span>
+<span class="source-line-no">399</span><span id="line-399">    }</span>
+<span class="source-line-no">400</span><span id="line-400"></span>
+<span class="source-line-no">401</span><span id="line-401">    @Override</span>
+<span class="source-line-no">402</span><span id="line-402">    public int getValueOffset() {</span>
+<span class="source-line-no">403</span><span id="line-403">      return this.cell.getValueOffset();</span>
+<span class="source-line-no">404</span><span id="line-404">    }</span>
+<span class="source-line-no">405</span><span id="line-405"></span>
+<span class="source-line-no">406</span><span id="line-406">    @Override</span>
+<span class="source-line-no">407</span><span id="line-407">    public int getValueLength() {</span>
+<span class="source-line-no">408</span><span id="line-408">      return this.cell.getValueLength();</span>
+<span class="source-line-no">409</span><span id="line-409">    }</span>
+<span class="source-line-no">410</span><span id="line-410"></span>
+<span class="source-line-no">411</span><span id="line-411">    @Override</span>
+<span class="source-line-no">412</span><span id="line-412">    public byte[] getTagsArray() {</span>
+<span class="source-line-no">413</span><span id="line-413">      return this.tags;</span>
+<span class="source-line-no">414</span><span id="line-414">    }</span>
+<span class="source-line-no">415</span><span id="line-415"></span>
+<span class="source-line-no">416</span><span id="line-416">    @Override</span>
+<span class="source-line-no">417</span><span id="line-417">    public int getTagsOffset() {</span>
+<span class="source-line-no">418</span><span id="line-418">      return 0;</span>
+<span class="source-line-no">419</span><span id="line-419">    }</span>
+<span class="source-line-no">420</span><span id="line-420"></span>
+<span class="source-line-no">421</span><span id="line-421">    @Override</span>
+<span class="source-line-no">422</span><span id="line-422">    public int getTagsLength() {</span>
+<span class="source-line-no">423</span><span id="line-423">      if (null == this.tags) {</span>
+<span class="source-line-no">424</span><span id="line-424">        // Nulled out tags array optimization in constructor</span>
+<span class="source-line-no">425</span><span id="line-425">        return 0;</span>
+<span class="source-line-no">426</span><span id="line-426">      }</span>
+<span class="source-line-no">427</span><span id="line-427">      return this.tags.length;</span>
+<span class="source-line-no">428</span><span id="line-428">    }</span>
+<span class="source-line-no">429</span><span id="line-429"></span>
+<span class="source-line-no">430</span><span id="line-430">    @Override</span>
+<span class="source-line-no">431</span><span id="line-431">    public void setSequenceId(long seqId) throws IOException {</span>
+<span class="source-line-no">432</span><span id="line-432">      PrivateCellUtil.setSequenceId(this.cell, seqId);</span>
+<span class="source-line-no">433</span><span id="line-433">    }</span>
+<span class="source-line-no">434</span><span id="line-434"></span>
+<span class="source-line-no">435</span><span id="line-435">    @Override</span>
+<span class="source-line-no">436</span><span id="line-436">    public void setTimestamp(long ts) throws IOException {</span>
+<span class="source-line-no">437</span><span id="line-437">      PrivateCellUtil.setTimestamp(this.cell, ts);</span>
+<span class="source-line-no">438</span><span id="line-438">    }</span>
+<span class="source-line-no">439</span><span id="line-439"></span>
+<span class="source-line-no">440</span><span id="line-440">    @Override</span>
+<span class="source-line-no">441</span><span id="line-441">    public void setTimestamp(byte[] ts) throws IOException {</span>
+<span class="source-line-no">442</span><span id="line-442">      PrivateCellUtil.setTimestamp(this.cell, ts);</span>
+<span class="source-line-no">443</span><span id="line-443">    }</span>
+<span class="source-line-no">444</span><span id="line-444"></span>
+<span class="source-line-no">445</span><span id="line-445">    @Override</span>
+<span class="source-line-no">446</span><span id="line-446">    public long heapSize() {</span>
+<span class="source-line-no">447</span><span id="line-447">      long sum = HEAP_SIZE_OVERHEAD + cell.heapSize();</span>
+<span class="source-line-no">448</span><span id="line-448">      // this.tags is on heap byte[]</span>
+<span class="source-line-no">449</span><span id="line-449">      if (this.tags != null) {</span>
+<span class="source-line-no">450</span><span id="line-450">        sum += ClassSize.sizeOf(this.tags);</span>
+<span class="source-line-no">451</span><span id="line-451">      }</span>
+<span class="source-line-no">452</span><span id="line-452">      return sum;</span>
+<span class="source-line-no">453</span><span id="line-453">    }</span>
+<span class="source-line-no">454</span><span id="line-454"></span>
+<span class="source-line-no">455</span><span id="line-455">    @Override</span>
+<span class="source-line-no">456</span><span id="line-456">    public int write(OutputStream out, boolean withTags) throws IOException {</span>
+<span class="source-line-no">457</span><span id="line-457">      int len = ((ExtendedCell) this.cell).write(out, false);</span>
+<span class="source-line-no">458</span><span id="line-458">      if (withTags &amp;&amp; this.tags != null) {</span>
+<span class="source-line-no">459</span><span id="line-459">        // Write the tagsLength 2 bytes</span>
+<span class="source-line-no">460</span><span id="line-460">        out.write((byte) (0xff &amp; (this.tags.length &gt;&gt; 8)));</span>
+<span class="source-line-no">461</span><span id="line-461">        out.write((byte) (0xff &amp; this.tags.length));</span>
+<span class="source-line-no">462</span><span id="line-462">        out.write(this.tags);</span>
+<span class="source-line-no">463</span><span id="line-463">        len += KeyValue.TAGS_LENGTH_SIZE + this.tags.length;</span>
+<span class="source-line-no">464</span><span id="line-464">      }</span>
+<span class="source-line-no">465</span><span id="line-465">      return len;</span>
+<span class="source-line-no">466</span><span id="line-466">    }</span>
+<span class="source-line-no">467</span><span id="line-467"></span>
+<span class="source-line-no">468</span><span id="line-468">    @Override</span>
+<span class="source-line-no">469</span><span id="line-469">    public int getSerializedSize(boolean withTags) {</span>
+<span class="source-line-no">470</span><span id="line-470">      int len = ((ExtendedCell) this.cell).getSerializedSize(false);</span>
+<span class="source-line-no">471</span><span id="line-471">      if (withTags &amp;&amp; this.tags != null) {</span>
+<span class="source-line-no">472</span><span id="line-472">        len += KeyValue.TAGS_LENGTH_SIZE + this.tags.length;</span>
+<span class="source-line-no">473</span><span id="line-473">      }</span>
+<span class="source-line-no">474</span><span id="line-474">      return len;</span>
+<span class="source-line-no">475</span><span id="line-475">    }</span>
+<span class="source-line-no">476</span><span id="line-476"></span>
+<span class="source-line-no">477</span><span id="line-477">    @Override</span>
+<span class="source-line-no">478</span><span id="line-478">    public void write(ByteBuffer buf, int offset) {</span>
+<span class="source-line-no">479</span><span id="line-479">      offset = KeyValueUtil.appendTo(this.cell, buf, offset, false);</span>
+<span class="source-line-no">480</span><span id="line-480">      int tagsLen = this.tags == null ? 0 : this.tags.length;</span>
+<span class="source-line-no">481</span><span id="line-481">      if (tagsLen &gt; 0) {</span>
+<span class="source-line-no">482</span><span id="line-482">        offset = ByteBufferUtils.putAsShort(buf, offset, tagsLen);</span>
+<span class="source-line-no">483</span><span id="line-483">        ByteBufferUtils.copyFromArrayToBuffer(buf, offset, this.tags, 0, tagsLen);</span>
+<span class="source-line-no">484</span><span id="line-484">      }</span>
+<span class="source-line-no">485</span><span id="line-485">    }</span>
+<span class="source-line-no">486</span><span id="line-486"></span>
+<span class="source-line-no">487</span><span id="line-487">    @Override</span>
+<span class="source-line-no">488</span><span id="line-488">    public ExtendedCell deepClone() {</span>
+<span class="source-line-no">489</span><span id="line-489">      ExtendedCell clonedBaseCell = this.cell.deepClone();</span>
+<span class="source-line-no">490</span><span id="line-490">      if (clonedBaseCell instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">491</span><span id="line-491">        return new TagRewriteByteBufferExtendedCell((ByteBufferExtendedCell) clonedBaseCell,</span>
+<span class="source-line-no">492</span><span id="line-492">          this.tags);</span>
+<span class="source-line-no">493</span><span id="line-493">      }</span>
+<span class="source-line-no">494</span><span id="line-494">      return new TagRewriteCell(clonedBaseCell, this.tags);</span>
+<span class="source-line-no">495</span><span id="line-495">    }</span>
+<span class="source-line-no">496</span><span id="line-496"></span>
+<span class="source-line-no">497</span><span id="line-497">    @Override</span>
+<span class="source-line-no">498</span><span id="line-498">    public ByteBuffer getRowByteBuffer() {</span>
+<span class="source-line-no">499</span><span id="line-499">      return this.cell.getRowByteBuffer();</span>
+<span class="source-line-no">500</span><span id="line-500">    }</span>
+<span class="source-line-no">501</span><span id="line-501"></span>
+<span class="source-line-no">502</span><span id="line-502">    @Override</span>
+<span class="source-line-no">503</span><span id="line-503">    public int getRowPosition() {</span>
+<span class="source-line-no">504</span><span id="line-504">      return this.cell.getRowPosition();</span>
+<span class="source-line-no">505</span><span id="line-505">    }</span>
+<span class="source-line-no">506</span><span id="line-506"></span>
+<span class="source-line-no">507</span><span id="line-507">    @Override</span>
+<span class="source-line-no">508</span><span id="line-508">    public ByteBuffer getFamilyByteBuffer() {</span>
+<span class="source-line-no">509</span><span id="line-509">      return this.cell.getFamilyByteBuffer();</span>
+<span class="source-line-no">510</span><span id="line-510">    }</span>
+<span class="source-line-no">511</span><span id="line-511"></span>
+<span class="source-line-no">512</span><span id="line-512">    @Override</span>
+<span class="source-line-no">513</span><span id="line-513">    public int getFamilyPosition() {</span>
+<span class="source-line-no">514</span><span id="line-514">      return this.cell.getFamilyPosition();</span>
+<span class="source-line-no">515</span><span id="line-515">    }</span>
+<span class="source-line-no">516</span><span id="line-516"></span>
+<span class="source-line-no">517</span><span id="line-517">    @Override</span>
+<span class="source-line-no">518</span><span id="line-518">    public ByteBuffer getQualifierByteBuffer() {</span>
+<span class="source-line-no">519</span><span id="line-519">      return this.cell.getQualifierByteBuffer();</span>
+<span class="source-line-no">520</span><span id="line-520">    }</span>
+<span class="source-line-no">521</span><span id="line-521"></span>
+<span class="source-line-no">522</span><span id="line-522">    @Override</span>
+<span class="source-line-no">523</span><span id="line-523">    public int getQualifierPosition() {</span>
+<span class="source-line-no">524</span><span id="line-524">      return this.cell.getQualifierPosition();</span>
+<span class="source-line-no">525</span><span id="line-525">    }</span>
+<span class="source-line-no">526</span><span id="line-526"></span>
+<span class="source-line-no">527</span><span id="line-527">    @Override</span>
+<span class="source-line-no">528</span><span id="line-528">    public ByteBuffer getValueByteBuffer() {</span>
+<span class="source-line-no">529</span><span id="line-529">      return this.cell.getValueByteBuffer();</span>
+<span class="source-line-no">530</span><span id="line-530">    }</span>
+<span class="source-line-no">531</span><span id="line-531"></span>
+<span class="source-line-no">532</span><span id="line-532">    @Override</span>
+<span class="source-line-no">533</span><span id="line-533">    public int getValuePosition() {</span>
+<span class="source-line-no">534</span><span id="line-534">      return this.cell.getValuePosition();</span>
+<span class="source-line-no">535</span><span id="line-535">    }</span>
+<span class="source-line-no">536</span><span id="line-536"></span>
+<span class="source-line-no">537</span><span id="line-537">    @Override</span>
+<span class="source-line-no">538</span><span id="line-538">    public ByteBuffer getTagsByteBuffer() {</span>
+<span class="source-line-no">539</span><span id="line-539">      return this.tags == null ? HConstants.EMPTY_BYTE_BUFFER : ByteBuffer.wrap(this.tags);</span>
+<span class="source-line-no">540</span><span id="line-540">    }</span>
+<span class="source-line-no">541</span><span id="line-541"></span>
+<span class="source-line-no">542</span><span id="line-542">    @Override</span>
+<span class="source-line-no">543</span><span id="line-543">    public int getTagsPosition() {</span>
+<span class="source-line-no">544</span><span id="line-544">      return 0;</span>
+<span class="source-line-no">545</span><span id="line-545">    }</span>
+<span class="source-line-no">546</span><span id="line-546">  }</span>
+<span class="source-line-no">547</span><span id="line-547"></span>
+<span class="source-line-no">548</span><span id="line-548">  static class ValueAndTagRewriteCell extends TagRewriteCell {</span>
+<span class="source-line-no">549</span><span id="line-549"></span>
+<span class="source-line-no">550</span><span id="line-550">    protected byte[] value;</span>
+<span class="source-line-no">551</span><span id="line-551"></span>
+<span class="source-line-no">552</span><span id="line-552">    public ValueAndTagRewriteCell(ExtendedCell cell, byte[] value, byte[] tags) {</span>
+<span class="source-line-no">553</span><span id="line-553">      super(cell, tags);</span>
+<span class="source-line-no">554</span><span id="line-554">      this.value = value;</span>
+<span class="source-line-no">555</span><span id="line-555">    }</span>
+<span class="source-line-no">556</span><span id="line-556"></span>
+<span class="source-line-no">557</span><span id="line-557">    @Override</span>
+<span class="source-line-no">558</span><span id="line-558">    public byte[] getValueArray() {</span>
+<span class="source-line-no">559</span><span id="line-559">      return this.value;</span>
+<span class="source-line-no">560</span><span id="line-560">    }</span>
+<span class="source-line-no">561</span><span id="line-561"></span>
+<span class="source-line-no">562</span><span id="line-562">    @Override</span>
+<span class="source-line-no">563</span><span id="line-563">    public int getValueOffset() {</span>
+<span class="source-line-no">564</span><span id="line-564">      return 0;</span>
+<span class="source-line-no">565</span><span id="line-565">    }</span>
+<span class="source-line-no">566</span><span id="line-566"></span>
+<span class="source-line-no">567</span><span id="line-567">    @Override</span>
+<span class="source-line-no">568</span><span id="line-568">    public int getValueLength() {</span>
+<span class="source-line-no">569</span><span id="line-569">      return this.value == null ? 0 : this.value.length;</span>
+<span class="source-line-no">570</span><span id="line-570">    }</span>
+<span class="source-line-no">571</span><span id="line-571"></span>
+<span class="source-line-no">572</span><span id="line-572">    @Override</span>
+<span class="source-line-no">573</span><span id="line-573">    public long heapSize() {</span>
+<span class="source-line-no">574</span><span id="line-574">      long sum = ClassSize.REFERENCE + super.heapSize();</span>
+<span class="source-line-no">575</span><span id="line-575">      if (this.value != null) {</span>
+<span class="source-line-no">576</span><span id="line-576">        sum += ClassSize.sizeOf(this.value);</span>
+<span class="source-line-no">577</span><span id="line-577">      }</span>
+<span class="source-line-no">578</span><span id="line-578">      return sum;</span>
+<span class="source-line-no">579</span><span id="line-579">    }</span>
+<span class="source-line-no">580</span><span id="line-580"></span>
+<span class="source-line-no">581</span><span id="line-581">    @Override</span>
+<span class="source-line-no">582</span><span id="line-582">    public int write(OutputStream out, boolean withTags) throws IOException {</span>
+<span class="source-line-no">583</span><span id="line-583">      return write(out, withTags, this.cell, this.value, this.tags);</span>
+<span class="source-line-no">584</span><span id="line-584">    }</span>
+<span class="source-line-no">585</span><span id="line-585"></span>
+<span class="source-line-no">586</span><span id="line-586">    /**</span>
+<span class="source-line-no">587</span><span id="line-587">     * Made into a static method so as to reuse the logic within</span>
+<span class="source-line-no">588</span><span id="line-588">     * ValueAndTagRewriteByteBufferExtendedCell</span>
+<span class="source-line-no">589</span><span id="line-589">     */</span>
+<span class="source-line-no">590</span><span id="line-590">    static int write(OutputStream out, boolean withTags, ExtendedCell cell, byte[] value,</span>
+<span class="source-line-no">591</span><span id="line-591">      byte[] tags) throws IOException {</span>
+<span class="source-line-no">592</span><span id="line-592">      int valLen = value == null ? 0 : value.length;</span>
+<span class="source-line-no">593</span><span id="line-593">      ByteBufferUtils.putInt(out, KeyValueUtil.keyLength(cell));// Key length</span>
+<span class="source-line-no">594</span><span id="line-594">      ByteBufferUtils.putInt(out, valLen);// Value length</span>
+<span class="source-line-no">595</span><span id="line-595">      int len = 2 * Bytes.SIZEOF_INT;</span>
+<span class="source-line-no">596</span><span id="line-596">      len += writeFlatKey(cell, out);// Key</span>
+<span class="source-line-no">597</span><span id="line-597">      if (valLen &gt; 0) {</span>
+<span class="source-line-no">598</span><span id="line-598">        out.write(value);// Value</span>
+<span class="source-line-no">599</span><span id="line-599">      }</span>
+<span class="source-line-no">600</span><span id="line-600">      len += valLen;</span>
+<span class="source-line-no">601</span><span id="line-601">      if (withTags &amp;&amp; tags != null) {</span>
+<span class="source-line-no">602</span><span id="line-602">        // Write the tagsLength 2 bytes</span>
+<span class="source-line-no">603</span><span id="line-603">        out.write((byte) (0xff &amp; (tags.length &gt;&gt; 8)));</span>
+<span class="source-line-no">604</span><span id="line-604">        out.write((byte) (0xff &amp; tags.length));</span>
+<span class="source-line-no">605</span><span id="line-605">        out.write(tags);</span>
+<span class="source-line-no">606</span><span id="line-606">        len += KeyValue.TAGS_LENGTH_SIZE + tags.length;</span>
+<span class="source-line-no">607</span><span id="line-607">      }</span>
+<span class="source-line-no">608</span><span id="line-608">      return len;</span>
+<span class="source-line-no">609</span><span id="line-609">    }</span>
+<span class="source-line-no">610</span><span id="line-610"></span>
+<span class="source-line-no">611</span><span id="line-611">    @Override</span>
+<span class="source-line-no">612</span><span id="line-612">    public int getSerializedSize(boolean withTags) {</span>
+<span class="source-line-no">613</span><span id="line-613">      return super.getSerializedSize(withTags) - this.cell.getValueLength() + this.value.length;</span>
+<span class="source-line-no">614</span><span id="line-614">    }</span>
+<span class="source-line-no">615</span><span id="line-615"></span>
+<span class="source-line-no">616</span><span id="line-616">    @Override</span>
+<span class="source-line-no">617</span><span id="line-617">    public void write(ByteBuffer buf, int offset) {</span>
+<span class="source-line-no">618</span><span id="line-618">      write(buf, offset, this.cell, this.value, this.tags);</span>
+<span class="source-line-no">619</span><span id="line-619">    }</span>
+<span class="source-line-no">620</span><span id="line-620"></span>
+<span class="source-line-no">621</span><span id="line-621">    /**</span>
+<span class="source-line-no">622</span><span id="line-622">     * Made into a static method so as to reuse the logic within</span>
+<span class="source-line-no">623</span><span id="line-623">     * ValueAndTagRewriteByteBufferExtendedCell</span>
+<span class="source-line-no">624</span><span id="line-624">     */</span>
+<span class="source-line-no">625</span><span id="line-625">    static void write(ByteBuffer buf, int offset, ExtendedCell cell, byte[] value, byte[] tags) {</span>
+<span class="source-line-no">626</span><span id="line-626">      offset = ByteBufferUtils.putInt(buf, offset, KeyValueUtil.keyLength(cell));// Key length</span>
+<span class="source-line-no">627</span><span id="line-627">      offset = ByteBufferUtils.putInt(buf, offset, value.length);// Value length</span>
+<span class="source-line-no">628</span><span id="line-628">      offset = KeyValueUtil.appendKeyTo(cell, buf, offset);</span>
+<span class="source-line-no">629</span><span id="line-629">      ByteBufferUtils.copyFromArrayToBuffer(buf, offset, value, 0, value.length);</span>
+<span class="source-line-no">630</span><span id="line-630">      offset += value.length;</span>
+<span class="source-line-no">631</span><span id="line-631">      int tagsLen = tags == null ? 0 : tags.length;</span>
+<span class="source-line-no">632</span><span id="line-632">      if (tagsLen &gt; 0) {</span>
+<span class="source-line-no">633</span><span id="line-633">        offset = ByteBufferUtils.putAsShort(buf, offset, tagsLen);</span>
+<span class="source-line-no">634</span><span id="line-634">        ByteBufferUtils.copyFromArrayToBuffer(buf, offset, tags, 0, tagsLen);</span>
+<span class="source-line-no">635</span><span id="line-635">      }</span>
+<span class="source-line-no">636</span><span id="line-636">    }</span>
+<span class="source-line-no">637</span><span id="line-637"></span>
+<span class="source-line-no">638</span><span id="line-638">    @Override</span>
+<span class="source-line-no">639</span><span id="line-639">    public ExtendedCell deepClone() {</span>
+<span class="source-line-no">640</span><span id="line-640">      ExtendedCell clonedBaseCell = this.cell.deepClone();</span>
+<span class="source-line-no">641</span><span id="line-641">      return new ValueAndTagRewriteCell(clonedBaseCell, this.value, this.tags);</span>
+<span class="source-line-no">642</span><span id="line-642">    }</span>
+<span class="source-line-no">643</span><span id="line-643">  }</span>
+<span class="source-line-no">644</span><span id="line-644"></span>
+<span class="source-line-no">645</span><span id="line-645">  static class ValueAndTagRewriteByteBufferExtendedCell extends TagRewriteByteBufferExtendedCell {</span>
+<span class="source-line-no">646</span><span id="line-646"></span>
+<span class="source-line-no">647</span><span id="line-647">    protected byte[] value;</span>
+<span class="source-line-no">648</span><span id="line-648"></span>
+<span class="source-line-no">649</span><span id="line-649">    public ValueAndTagRewriteByteBufferExtendedCell(ByteBufferExtendedCell cell, byte[] value,</span>
+<span class="source-line-no">650</span><span id="line-650">      byte[] tags) {</span>
+<span class="source-line-no">651</span><span id="line-651">      super(cell, tags);</span>
+<span class="source-line-no">652</span><span id="line-652">      this.value = value;</span>
+<span class="source-line-no">653</span><span id="line-653">    }</span>
+<span class="source-line-no">654</span><span id="line-654"></span>
+<span class="source-line-no">655</span><span id="line-655">    @Override</span>
+<span class="source-line-no">656</span><span id="line-656">    public byte[] getValueArray() {</span>
+<span class="source-line-no">657</span><span id="line-657">      return this.value;</span>
+<span class="source-line-no">658</span><span id="line-658">    }</span>
+<span class="source-line-no">659</span><span id="line-659"></span>
+<span class="source-line-no">660</span><span id="line-660">    @Override</span>
+<span class="source-line-no">661</span><span id="line-661">    public int getValueOffset() {</span>
+<span class="source-line-no">662</span><span id="line-662">      return 0;</span>
+<span class="source-line-no">663</span><span id="line-663">    }</span>
+<span class="source-line-no">664</span><span id="line-664"></span>
+<span class="source-line-no">665</span><span id="line-665">    @Override</span>
+<span class="source-line-no">666</span><span id="line-666">    public int getValueLength() {</span>
+<span class="source-line-no">667</span><span id="line-667">      return this.value == null ? 0 : this.value.length;</span>
+<span class="source-line-no">668</span><span id="line-668">    }</span>
+<span class="source-line-no">669</span><span id="line-669"></span>
+<span class="source-line-no">670</span><span id="line-670">    @Override</span>
+<span class="source-line-no">671</span><span id="line-671">    public ByteBuffer getValueByteBuffer() {</span>
+<span class="source-line-no">672</span><span id="line-672">      return ByteBuffer.wrap(this.value);</span>
+<span class="source-line-no">673</span><span id="line-673">    }</span>
+<span class="source-line-no">674</span><span id="line-674"></span>
+<span class="source-line-no">675</span><span id="line-675">    @Override</span>
+<span class="source-line-no">676</span><span id="line-676">    public int getValuePosition() {</span>
+<span class="source-line-no">677</span><span id="line-677">      return 0;</span>
+<span class="source-line-no">678</span><span id="line-678">    }</span>
+<span class="source-line-no">679</span><span id="line-679"></span>
+<span class="source-line-no">680</span><span id="line-680">    @Override</span>
+<span class="source-line-no">681</span><span id="line-681">    public long heapSize() {</span>
+<span class="source-line-no">682</span><span id="line-682">      long sum = ClassSize.REFERENCE + super.heapSize();</span>
+<span class="source-line-no">683</span><span id="line-683">      if (this.value != null) {</span>
+<span class="source-line-no">684</span><span id="line-684">        sum += ClassSize.sizeOf(this.value);</span>
+<span class="source-line-no">685</span><span id="line-685">      }</span>
+<span class="source-line-no">686</span><span id="line-686">      return sum;</span>
+<span class="source-line-no">687</span><span id="line-687">    }</span>
+<span class="source-line-no">688</span><span id="line-688"></span>
+<span class="source-line-no">689</span><span id="line-689">    @Override</span>
+<span class="source-line-no">690</span><span id="line-690">    public int write(OutputStream out, boolean withTags) throws IOException {</span>
+<span class="source-line-no">691</span><span id="line-691">      return ValueAndTagRewriteCell.write(out, withTags, this.cell, this.value, this.tags);</span>
+<span class="source-line-no">692</span><span id="line-692">    }</span>
+<span class="source-line-no">693</span><span id="line-693"></span>
+<span class="source-line-no">694</span><span id="line-694">    @Override</span>
+<span class="source-line-no">695</span><span id="line-695">    public int getSerializedSize(boolean withTags) {</span>
+<span class="source-line-no">696</span><span id="line-696">      return super.getSerializedSize(withTags) - this.cell.getValueLength() + this.value.length;</span>
+<span class="source-line-no">697</span><span id="line-697">    }</span>
+<span class="source-line-no">698</span><span id="line-698"></span>
+<span class="source-line-no">699</span><span id="line-699">    @Override</span>
+<span class="source-line-no">700</span><span id="line-700">    public void write(ByteBuffer buf, int offset) {</span>
+<span class="source-line-no">701</span><span id="line-701">      ValueAndTagRewriteCell.write(buf, offset, this.cell, this.value, this.tags);</span>
+<span class="source-line-no">702</span><span id="line-702">    }</span>
+<span class="source-line-no">703</span><span id="line-703"></span>
+<span class="source-line-no">704</span><span id="line-704">    @Override</span>
+<span class="source-line-no">705</span><span id="line-705">    public ExtendedCell deepClone() {</span>
+<span class="source-line-no">706</span><span id="line-706">      ExtendedCell clonedBaseCell = this.cell.deepClone();</span>
+<span class="source-line-no">707</span><span id="line-707">      if (clonedBaseCell instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">708</span><span id="line-708">        return new ValueAndTagRewriteByteBufferExtendedCell((ByteBufferExtendedCell) clonedBaseCell,</span>
+<span class="source-line-no">709</span><span id="line-709">          this.value, this.tags);</span>
+<span class="source-line-no">710</span><span id="line-710">      }</span>
+<span class="source-line-no">711</span><span id="line-711">      return new ValueAndTagRewriteCell(clonedBaseCell, this.value, this.tags);</span>
+<span class="source-line-no">712</span><span id="line-712">    }</span>
+<span class="source-line-no">713</span><span id="line-713">  }</span>
+<span class="source-line-no">714</span><span id="line-714"></span>
+<span class="source-line-no">715</span><span id="line-715">  public static boolean matchingRows(final Cell left, final byte[] buf, final int offset,</span>
+<span class="source-line-no">716</span><span id="line-716">    final int length) {</span>
+<span class="source-line-no">717</span><span id="line-717">    if (left instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">718</span><span id="line-718">      return ByteBufferUtils.equals(((ByteBufferExtendedCell) left).getRowByteBuffer(),</span>
+<span class="source-line-no">719</span><span id="line-719">        ((ByteBufferExtendedCell) left).getRowPosition(), left.getRowLength(), buf, offset, length);</span>
+<span class="source-line-no">720</span><span id="line-720">    }</span>
+<span class="source-line-no">721</span><span id="line-721">    return Bytes.equals(left.getRowArray(), left.getRowOffset(), left.getRowLength(), buf, offset,</span>
+<span class="source-line-no">722</span><span id="line-722">      length);</span>
+<span class="source-line-no">723</span><span id="line-723">  }</span>
+<span class="source-line-no">724</span><span id="line-724"></span>
+<span class="source-line-no">725</span><span id="line-725">  public static boolean matchingFamily(final Cell left, final byte[] buf, final int offset,</span>
+<span class="source-line-no">726</span><span id="line-726">    final int length) {</span>
+<span class="source-line-no">727</span><span id="line-727">    if (left instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">728</span><span id="line-728">      return ByteBufferUtils.equals(((ByteBufferExtendedCell) left).getFamilyByteBuffer(),</span>
+<span class="source-line-no">729</span><span id="line-729">        ((ByteBufferExtendedCell) left).getFamilyPosition(), left.getFamilyLength(), buf, offset,</span>
+<span class="source-line-no">730</span><span id="line-730">        length);</span>
+<span class="source-line-no">731</span><span id="line-731">    }</span>
+<span class="source-line-no">732</span><span id="line-732">    return Bytes.equals(left.getFamilyArray(), left.getFamilyOffset(), left.getFamilyLength(), buf,</span>
+<span class="source-line-no">733</span><span id="line-733">      offset, length);</span>
+<span class="source-line-no">734</span><span id="line-734">  }</span>
+<span class="source-line-no">735</span><span id="line-735"></span>
+<span class="source-line-no">736</span><span id="line-736">  /**</span>
+<span class="source-line-no">737</span><span id="line-737">   * Finds if the qualifier part of the cell and the KV serialized byte[] are equal</span>
+<span class="source-line-no">738</span><span id="line-738">   * @param left   the cell with which we need to match the qualifier</span>
+<span class="source-line-no">739</span><span id="line-739">   * @param buf    the serialized keyvalue format byte[]</span>
+<span class="source-line-no">740</span><span id="line-740">   * @param offset the offset of the qualifier in the byte[]</span>
+<span class="source-line-no">741</span><span id="line-741">   * @param length the length of the qualifier in the byte[]</span>
+<span class="source-line-no">742</span><span id="line-742">   * @return true if the qualifier matches, false otherwise</span>
+<span class="source-line-no">743</span><span id="line-743">   */</span>
+<span class="source-line-no">744</span><span id="line-744">  public static boolean matchingQualifier(final Cell left, final byte[] buf, final int offset,</span>
+<span class="source-line-no">745</span><span id="line-745">    final int length) {</span>
+<span class="source-line-no">746</span><span id="line-746">    if (buf == null) {</span>
+<span class="source-line-no">747</span><span id="line-747">      return left.getQualifierLength() == 0;</span>
+<span class="source-line-no">748</span><span id="line-748">    }</span>
+<span class="source-line-no">749</span><span id="line-749">    if (left instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">750</span><span id="line-750">      return ByteBufferUtils.equals(((ByteBufferExtendedCell) left).getQualifierByteBuffer(),</span>
+<span class="source-line-no">751</span><span id="line-751">        ((ByteBufferExtendedCell) left).getQualifierPosition(), left.getQualifierLength(), buf,</span>
+<span class="source-line-no">752</span><span id="line-752">        offset, length);</span>
+<span class="source-line-no">753</span><span id="line-753">    }</span>
+<span class="source-line-no">754</span><span id="line-754">    return Bytes.equals(left.getQualifierArray(), left.getQualifierOffset(),</span>
+<span class="source-line-no">755</span><span id="line-755">      left.getQualifierLength(), buf, offset, length);</span>
+<span class="source-line-no">756</span><span id="line-756">  }</span>
+<span class="source-line-no">757</span><span id="line-757"></span>
+<span class="source-line-no">758</span><span id="line-758">  /**</span>
+<span class="source-line-no">759</span><span id="line-759">   * Finds if the start of the qualifier part of the Cell matches &lt;code&gt;buf&lt;/code&gt;</span>
+<span class="source-line-no">760</span><span id="line-760">   * @param left       the cell with which we need to match the qualifier</span>
+<span class="source-line-no">761</span><span id="line-761">   * @param startsWith the serialized keyvalue format byte[]</span>
+<span class="source-line-no">762</span><span id="line-762">   * @return true if the qualifier have same staring characters, false otherwise</span>
+<span class="source-line-no">763</span><span id="line-763">   */</span>
+<span class="source-line-no">764</span><span id="line-764">  public static boolean qualifierStartsWith(final Cell left, final byte[] startsWith) {</span>
+<span class="source-line-no">765</span><span id="line-765">    if (startsWith == null || startsWith.length == 0) {</span>
+<span class="source-line-no">766</span><span id="line-766">      throw new IllegalArgumentException("Cannot pass an empty startsWith");</span>
+<span class="source-line-no">767</span><span id="line-767">    }</span>
+<span class="source-line-no">768</span><span id="line-768">    if (left.getQualifierLength() &lt; startsWith.length) {</span>
+<span class="source-line-no">769</span><span id="line-769">      return false;</span>
+<span class="source-line-no">770</span><span id="line-770">    }</span>
+<span class="source-line-no">771</span><span id="line-771">    if (left instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">772</span><span id="line-772">      return ByteBufferUtils.equals(((ByteBufferExtendedCell) left).getQualifierByteBuffer(),</span>
+<span class="source-line-no">773</span><span id="line-773">        ((ByteBufferExtendedCell) left).getQualifierPosition(), startsWith.length, startsWith, 0,</span>
+<span class="source-line-no">774</span><span id="line-774">        startsWith.length);</span>
+<span class="source-line-no">775</span><span id="line-775">    }</span>
+<span class="source-line-no">776</span><span id="line-776">    return Bytes.equals(left.getQualifierArray(), left.getQualifierOffset(), startsWith.length,</span>
+<span class="source-line-no">777</span><span id="line-777">      startsWith, 0, startsWith.length);</span>
+<span class="source-line-no">778</span><span id="line-778">  }</span>
+<span class="source-line-no">779</span><span id="line-779"></span>
+<span class="source-line-no">780</span><span id="line-780">  public static boolean matchingColumn(final Cell left, final byte[] fam, final int foffset,</span>
+<span class="source-line-no">781</span><span id="line-781">    final int flength, final byte[] qual, final int qoffset, final int qlength) {</span>
+<span class="source-line-no">782</span><span id="line-782">    if (!matchingFamily(left, fam, foffset, flength)) {</span>
+<span class="source-line-no">783</span><span id="line-783">      return false;</span>
+<span class="source-line-no">784</span><span id="line-784">    }</span>
+<span class="source-line-no">785</span><span id="line-785">    return matchingQualifier(left, qual, qoffset, qlength);</span>
+<span class="source-line-no">786</span><span id="line-786">  }</span>
+<span class="source-line-no">787</span><span id="line-787"></span>
+<span class="source-line-no">788</span><span id="line-788">  public static boolean matchingValue(final Cell left, final Cell right, int lvlength,</span>
+<span class="source-line-no">789</span><span id="line-789">    int rvlength) {</span>
+<span class="source-line-no">790</span><span id="line-790">    if (left instanceof ByteBufferExtendedCell &amp;&amp; right instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">791</span><span id="line-791">      return ByteBufferUtils.equals(((ByteBufferExtendedCell) left).getValueByteBuffer(),</span>
+<span class="source-line-no">792</span><span id="line-792">        ((ByteBufferExtendedCell) left).getValuePosition(), lvlength,</span>
+<span class="source-line-no">793</span><span id="line-793">        ((ByteBufferExtendedCell) right).getValueByteBuffer(),</span>
+<span class="source-line-no">794</span><span id="line-794">        ((ByteBufferExtendedCell) right).getValuePosition(), rvlength);</span>
+<span class="source-line-no">795</span><span id="line-795">    }</span>
+<span class="source-line-no">796</span><span id="line-796">    if (left instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">797</span><span id="line-797">      return ByteBufferUtils.equals(((ByteBufferExtendedCell) left).getValueByteBuffer(),</span>
+<span class="source-line-no">798</span><span id="line-798">        ((ByteBufferExtendedCell) left).getValuePosition(), lvlength, right.getValueArray(),</span>
+<span class="source-line-no">799</span><span id="line-799">        right.getValueOffset(), rvlength);</span>
+<span class="source-line-no">800</span><span id="line-800">    }</span>
+<span class="source-line-no">801</span><span id="line-801">    if (right instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">802</span><span id="line-802">      return ByteBufferUtils.equals(((ByteBufferExtendedCell) right).getValueByteBuffer(),</span>
+<span class="source-line-no">803</span><span id="line-803">        ((ByteBufferExtendedCell) right).getValuePosition(), rvlength, left.getValueArray(),</span>
+<span class="source-line-no">804</span><span id="line-804">        left.getValueOffset(), lvlength);</span>
+<span class="source-line-no">805</span><span id="line-805">    }</span>
+<span class="source-line-no">806</span><span id="line-806">    return Bytes.equals(left.getValueArray(), left.getValueOffset(), lvlength,</span>
+<span class="source-line-no">807</span><span id="line-807">      right.getValueArray(), right.getValueOffset(), rvlength);</span>
+<span class="source-line-no">808</span><span id="line-808">  }</span>
+<span class="source-line-no">809</span><span id="line-809"></span>
+<span class="source-line-no">810</span><span id="line-810">  public static boolean matchingType(ExtendedCell a, ExtendedCell b) {</span>
+<span class="source-line-no">811</span><span id="line-811">    return a.getTypeByte() == b.getTypeByte();</span>
+<span class="source-line-no">812</span><span id="line-812">  }</span>
+<span class="source-line-no">813</span><span id="line-813"></span>
+<span class="source-line-no">814</span><span id="line-814">  public static boolean matchingTags(final ExtendedCell left, final ExtendedCell right) {</span>
+<span class="source-line-no">815</span><span id="line-815">    return matchingTags(left, right, left.getTagsLength(), right.getTagsLength());</span>
+<span class="source-line-no">816</span><span id="line-816">  }</span>
+<span class="source-line-no">817</span><span id="line-817"></span>
+<span class="source-line-no">818</span><span id="line-818">  public static boolean matchingTags(final ExtendedCell left, final ExtendedCell right, int llength,</span>
+<span class="source-line-no">819</span><span id="line-819">    int rlength) {</span>
+<span class="source-line-no">820</span><span id="line-820">    if (left instanceof ByteBufferExtendedCell &amp;&amp; right instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">821</span><span id="line-821">      ByteBufferExtendedCell leftBBCell = (ByteBufferExtendedCell) left;</span>
+<span class="source-line-no">822</span><span id="line-822">      ByteBufferExtendedCell rightBBCell = (ByteBufferExtendedCell) right;</span>
+<span class="source-line-no">823</span><span id="line-823">      return ByteBufferUtils.equals(leftBBCell.getTagsByteBuffer(), leftBBCell.getTagsPosition(),</span>
+<span class="source-line-no">824</span><span id="line-824">        llength, rightBBCell.getTagsByteBuffer(), rightBBCell.getTagsPosition(), rlength);</span>
+<span class="source-line-no">825</span><span id="line-825">    }</span>
+<span class="source-line-no">826</span><span id="line-826">    if (left instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">827</span><span id="line-827">      ByteBufferExtendedCell leftBBCell = (ByteBufferExtendedCell) left;</span>
+<span class="source-line-no">828</span><span id="line-828">      return ByteBufferUtils.equals(leftBBCell.getTagsByteBuffer(), leftBBCell.getTagsPosition(),</span>
+<span class="source-line-no">829</span><span id="line-829">        llength, right.getTagsArray(), right.getTagsOffset(), rlength);</span>
+<span class="source-line-no">830</span><span id="line-830">    }</span>
+<span class="source-line-no">831</span><span id="line-831">    if (right instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">832</span><span id="line-832">      ByteBufferExtendedCell rightBBCell = (ByteBufferExtendedCell) right;</span>
+<span class="source-line-no">833</span><span id="line-833">      return ByteBufferUtils.equals(rightBBCell.getTagsByteBuffer(), rightBBCell.getTagsPosition(),</span>
+<span class="source-line-no">834</span><span id="line-834">        rlength, left.getTagsArray(), left.getTagsOffset(), llength);</span>
+<span class="source-line-no">835</span><span id="line-835">    }</span>
+<span class="source-line-no">836</span><span id="line-836">    return Bytes.equals(left.getTagsArray(), left.getTagsOffset(), llength, right.getTagsArray(),</span>
+<span class="source-line-no">837</span><span id="line-837">      right.getTagsOffset(), rlength);</span>
+<span class="source-line-no">838</span><span id="line-838">  }</span>
+<span class="source-line-no">839</span><span id="line-839"></span>
+<span class="source-line-no">840</span><span id="line-840">  /**</span>
+<span class="source-line-no">841</span><span id="line-841">   * Return true if a delete type, a {@link KeyValue.Type#Delete} or a {KeyValue.Type#DeleteFamily}</span>
+<span class="source-line-no">842</span><span id="line-842">   * or a {@link KeyValue.Type#DeleteColumn} KeyValue type.</span>
+<span class="source-line-no">843</span><span id="line-843">   */</span>
+<span class="source-line-no">844</span><span id="line-844">  public static boolean isDelete(final byte type) {</span>
+<span class="source-line-no">845</span><span id="line-845">    return KeyValue.Type.Delete.getCode() &lt;= type &amp;&amp; type &lt;= KeyValue.Type.DeleteFamily.getCode();</span>
+<span class="source-line-no">846</span><span id="line-846">  }</span>
+<span class="source-line-no">847</span><span id="line-847"></span>
+<span class="source-line-no">848</span><span id="line-848">  /** Returns True if this cell is a {@link KeyValue.Type#Delete} type. */</span>
+<span class="source-line-no">849</span><span id="line-849">  public static boolean isDeleteType(ExtendedCell cell) {</span>
+<span class="source-line-no">850</span><span id="line-850">    return cell.getTypeByte() == KeyValue.Type.Delete.getCode();</span>
+<span class="source-line-no">851</span><span id="line-851">  }</span>
+<span class="source-line-no">852</span><span id="line-852"></span>
+<span class="source-line-no">853</span><span id="line-853">  public static boolean isDeleteFamily(final ExtendedCell cell) {</span>
+<span class="source-line-no">854</span><span id="line-854">    return cell.getTypeByte() == KeyValue.Type.DeleteFamily.getCode();</span>
+<span class="source-line-no">855</span><span id="line-855">  }</span>
+<span class="source-line-no">856</span><span id="line-856"></span>
+<span class="source-line-no">857</span><span id="line-857">  public static boolean isDeleteFamilyVersion(final ExtendedCell cell) {</span>
+<span class="source-line-no">858</span><span id="line-858">    return cell.getTypeByte() == KeyValue.Type.DeleteFamilyVersion.getCode();</span>
+<span class="source-line-no">859</span><span id="line-859">  }</span>
+<span class="source-line-no">860</span><span id="line-860"></span>
+<span class="source-line-no">861</span><span id="line-861">  public static boolean isDeleteColumns(final ExtendedCell cell) {</span>
+<span class="source-line-no">862</span><span id="line-862">    return cell.getTypeByte() == KeyValue.Type.DeleteColumn.getCode();</span>
+<span class="source-line-no">863</span><span id="line-863">  }</span>
+<span class="source-line-no">864</span><span id="line-864"></span>
+<span class="source-line-no">865</span><span id="line-865">  public static boolean isDeleteColumnVersion(final ExtendedCell cell) {</span>
+<span class="source-line-no">866</span><span id="line-866">    return cell.getTypeByte() == KeyValue.Type.Delete.getCode();</span>
+<span class="source-line-no">867</span><span id="line-867">  }</span>
+<span class="source-line-no">868</span><span id="line-868"></span>
+<span class="source-line-no">869</span><span id="line-869">  /** Returns True if this cell is a delete family or column type. */</span>
+<span class="source-line-no">870</span><span id="line-870">  public static boolean isDeleteColumnOrFamily(ExtendedCell cell) {</span>
+<span class="source-line-no">871</span><span id="line-871">    int t = cell.getTypeByte();</span>
+<span class="source-line-no">872</span><span id="line-872">    return t == KeyValue.Type.DeleteColumn.getCode() || t == KeyValue.Type.DeleteFamily.getCode();</span>
+<span class="source-line-no">873</span><span id="line-873">  }</span>
+<span class="source-line-no">874</span><span id="line-874"></span>
+<span class="source-line-no">875</span><span id="line-875">  public static byte[] cloneTags(ExtendedCell cell) {</span>
+<span class="source-line-no">876</span><span id="line-876">    byte[] output = new byte[cell.getTagsLength()];</span>
+<span class="source-line-no">877</span><span id="line-877">    copyTagsTo(cell, output, 0);</span>
+<span class="source-line-no">878</span><span id="line-878">    return output;</span>
+<span class="source-line-no">879</span><span id="line-879">  }</span>
+<span class="source-line-no">880</span><span id="line-880"></span>
+<span class="source-line-no">881</span><span id="line-881">  /** Copies the tags info into the tag portion of the cell */</span>
+<span class="source-line-no">882</span><span id="line-882">  public static int copyTagsTo(ExtendedCell cell, byte[] destination, int destinationOffset) {</span>
+<span class="source-line-no">883</span><span id="line-883">    int tlen = cell.getTagsLength();</span>
+<span class="source-line-no">884</span><span id="line-884">    if (cell instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">885</span><span id="line-885">      ByteBufferUtils.copyFromBufferToArray(destination,</span>
+<span class="source-line-no">886</span><span id="line-886">        ((ByteBufferExtendedCell) cell).getTagsByteBuffer(),</span>
+<span class="source-line-no">887</span><span id="line-887">        ((ByteBufferExtendedCell) cell).getTagsPosition(), destinationOffset, tlen);</span>
+<span class="source-line-no">888</span><span id="line-888">    } else {</span>
+<span class="source-line-no">889</span><span id="line-889">      System.arraycopy(cell.getTagsArray(), cell.getTagsOffset(), destination, destinationOffset,</span>
+<span class="source-line-no">890</span><span id="line-890">        tlen);</span>
+<span class="source-line-no">891</span><span id="line-891">    }</span>
+<span class="source-line-no">892</span><span id="line-892">    return destinationOffset + tlen;</span>
+<span class="source-line-no">893</span><span id="line-893">  }</span>
+<span class="source-line-no">894</span><span id="line-894"></span>
+<span class="source-line-no">895</span><span id="line-895">  /** Copies the tags info into the tag portion of the cell */</span>
+<span class="source-line-no">896</span><span id="line-896">  public static int copyTagsTo(ExtendedCell cell, ByteBuffer destination, int destinationOffset) {</span>
+<span class="source-line-no">897</span><span id="line-897">    int tlen = cell.getTagsLength();</span>
+<span class="source-line-no">898</span><span id="line-898">    if (cell instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">899</span><span id="line-899">      ByteBufferUtils.copyFromBufferToBuffer(((ByteBufferExtendedCell) cell).getTagsByteBuffer(),</span>
+<span class="source-line-no">900</span><span id="line-900">        destination, ((ByteBufferExtendedCell) cell).getTagsPosition(), destinationOffset, tlen);</span>
+<span class="source-line-no">901</span><span id="line-901">    } else {</span>
+<span class="source-line-no">902</span><span id="line-902">      ByteBufferUtils.copyFromArrayToBuffer(destination, destinationOffset, cell.getTagsArray(),</span>
+<span class="source-line-no">903</span><span id="line-903">        cell.getTagsOffset(), tlen);</span>
+<span class="source-line-no">904</span><span id="line-904">    }</span>
+<span class="source-line-no">905</span><span id="line-905">    return destinationOffset + tlen;</span>
+<span class="source-line-no">906</span><span id="line-906">  }</span>
+<span class="source-line-no">907</span><span id="line-907"></span>
+<span class="source-line-no">908</span><span id="line-908">  /**</span>
+<span class="source-line-no">909</span><span id="line-909">   * Return tags in the given Cell as a List</span>
+<span class="source-line-no">910</span><span id="line-910">   * @param cell The Cell</span>
+<span class="source-line-no">911</span><span id="line-911">   * @return Tags in the given Cell as a List</span>
+<span class="source-line-no">912</span><span id="line-912">   */</span>
+<span class="source-line-no">913</span><span id="line-913">  public static List&lt;Tag&gt; getTags(ExtendedCell cell) {</span>
+<span class="source-line-no">914</span><span id="line-914">    List&lt;Tag&gt; tags = new ArrayList&lt;&gt;();</span>
+<span class="source-line-no">915</span><span id="line-915">    Iterator&lt;Tag&gt; tagsItr = tagsIterator(cell);</span>
+<span class="source-line-no">916</span><span id="line-916">    while (tagsItr.hasNext()) {</span>
+<span class="source-line-no">917</span><span id="line-917">      tags.add(tagsItr.next());</span>
+<span class="source-line-no">918</span><span id="line-918">    }</span>
+<span class="source-line-no">919</span><span id="line-919">    return tags;</span>
+<span class="source-line-no">920</span><span id="line-920">  }</span>
+<span class="source-line-no">921</span><span id="line-921"></span>
+<span class="source-line-no">922</span><span id="line-922">  /**</span>
+<span class="source-line-no">923</span><span id="line-923">   * Retrieve Cell's first tag, matching the passed in type</span>
+<span class="source-line-no">924</span><span id="line-924">   * @param cell The Cell</span>
+<span class="source-line-no">925</span><span id="line-925">   * @param type Type of the Tag to retrieve</span>
+<span class="source-line-no">926</span><span id="line-926">   * @return Optional, empty if there is no tag of the passed in tag type</span>
+<span class="source-line-no">927</span><span id="line-927">   */</span>
+<span class="source-line-no">928</span><span id="line-928">  public static Optional&lt;Tag&gt; getTag(ExtendedCell cell, byte type) {</span>
+<span class="source-line-no">929</span><span id="line-929">    boolean bufferBacked = cell instanceof ByteBufferExtendedCell;</span>
+<span class="source-line-no">930</span><span id="line-930">    int length = cell.getTagsLength();</span>
+<span class="source-line-no">931</span><span id="line-931">    int offset =</span>
+<span class="source-line-no">932</span><span id="line-932">      bufferBacked ? ((ByteBufferExtendedCell) cell).getTagsPosition() : cell.getTagsOffset();</span>
+<span class="source-line-no">933</span><span id="line-933">    int pos = offset;</span>
+<span class="source-line-no">934</span><span id="line-934">    while (pos &lt; offset + length) {</span>
+<span class="source-line-no">935</span><span id="line-935">      int tagLen;</span>
+<span class="source-line-no">936</span><span id="line-936">      if (bufferBacked) {</span>
+<span class="source-line-no">937</span><span id="line-937">        ByteBuffer tagsBuffer = ((ByteBufferExtendedCell) cell).getTagsByteBuffer();</span>
+<span class="source-line-no">938</span><span id="line-938">        tagLen = ByteBufferUtils.readAsInt(tagsBuffer, pos, TAG_LENGTH_SIZE);</span>
+<span class="source-line-no">939</span><span id="line-939">        if (ByteBufferUtils.toByte(tagsBuffer, pos + TAG_LENGTH_SIZE) == type) {</span>
+<span class="source-line-no">940</span><span id="line-940">          return Optional.of(new ByteBufferTag(tagsBuffer, pos, tagLen + TAG_LENGTH_SIZE));</span>
+<span class="source-line-no">941</span><span id="line-941">        }</span>
+<span class="source-line-no">942</span><span id="line-942">      } else {</span>
+<span class="source-line-no">943</span><span id="line-943">        tagLen = Bytes.readAsInt(cell.getTagsArray(), pos, TAG_LENGTH_SIZE);</span>
+<span class="source-line-no">944</span><span id="line-944">        if (cell.getTagsArray()[pos + TAG_LENGTH_SIZE] == type) {</span>
+<span class="source-line-no">945</span><span id="line-945">          return Optional</span>
+<span class="source-line-no">946</span><span id="line-946">            .of(new ArrayBackedTag(cell.getTagsArray(), pos, tagLen + TAG_LENGTH_SIZE));</span>
+<span class="source-line-no">947</span><span id="line-947">        }</span>
+<span class="source-line-no">948</span><span id="line-948">      }</span>
+<span class="source-line-no">949</span><span id="line-949">      pos += TAG_LENGTH_SIZE + tagLen;</span>
+<span class="source-line-no">950</span><span id="line-950">    }</span>
+<span class="source-line-no">951</span><span id="line-951">    return Optional.empty();</span>
+<span class="source-line-no">952</span><span id="line-952">  }</span>
+<span class="source-line-no">953</span><span id="line-953"></span>
+<span class="source-line-no">954</span><span id="line-954">  /**</span>
+<span class="source-line-no">955</span><span id="line-955">   * Utility method to iterate through the tags in the given cell.</span>
+<span class="source-line-no">956</span><span id="line-956">   * @param cell The Cell over which tags iterator is needed.</span>
+<span class="source-line-no">957</span><span id="line-957">   * @return iterator for the tags</span>
+<span class="source-line-no">958</span><span id="line-958">   */</span>
+<span class="source-line-no">959</span><span id="line-959">  public static Iterator&lt;Tag&gt; tagsIterator(final ExtendedCell cell) {</span>
+<span class="source-line-no">960</span><span id="line-960">    final int tagsLength = cell.getTagsLength();</span>
+<span class="source-line-no">961</span><span id="line-961">    // Save an object allocation where we can</span>
+<span class="source-line-no">962</span><span id="line-962">    if (tagsLength == 0) {</span>
+<span class="source-line-no">963</span><span id="line-963">      return TagUtil.EMPTY_TAGS_ITR;</span>
+<span class="source-line-no">964</span><span id="line-964">    }</span>
+<span class="source-line-no">965</span><span id="line-965">    if (cell instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">966</span><span id="line-966">      return tagsIterator(((ByteBufferExtendedCell) cell).getTagsByteBuffer(),</span>
+<span class="source-line-no">967</span><span id="line-967">        ((ByteBufferExtendedCell) cell).getTagsPosition(), tagsLength);</span>
+<span class="source-line-no">968</span><span id="line-968">    }</span>
+<span class="source-line-no">969</span><span id="line-969"></span>
+<span class="source-line-no">970</span><span id="line-970">    return new Iterator&lt;Tag&gt;() {</span>
+<span class="source-line-no">971</span><span id="line-971">      private int offset = cell.getTagsOffset();</span>
+<span class="source-line-no">972</span><span id="line-972">      private int pos = offset;</span>
+<span class="source-line-no">973</span><span id="line-973">      private int endOffset = offset + cell.getTagsLength() - 1;</span>
+<span class="source-line-no">974</span><span id="line-974"></span>
+<span class="source-line-no">975</span><span id="line-975">      @Override</span>
+<span class="source-line-no">976</span><span id="line-976">      public boolean hasNext() {</span>
+<span class="source-line-no">977</span><span id="line-977">        return this.pos &lt; endOffset;</span>
+<span class="source-line-no">978</span><span id="line-978">      }</span>
+<span class="source-line-no">979</span><span id="line-979"></span>
+<span class="source-line-no">980</span><span id="line-980">      @Override</span>
+<span class="source-line-no">981</span><span id="line-981">      public Tag next() {</span>
+<span class="source-line-no">982</span><span id="line-982">        if (hasNext()) {</span>
+<span class="source-line-no">983</span><span id="line-983">          byte[] tags = cell.getTagsArray();</span>
+<span class="source-line-no">984</span><span id="line-984">          int curTagLen = Bytes.readAsInt(tags, this.pos, Tag.TAG_LENGTH_SIZE);</span>
+<span class="source-line-no">985</span><span id="line-985">          Tag tag = new ArrayBackedTag(tags, pos, curTagLen + TAG_LENGTH_SIZE);</span>
+<span class="source-line-no">986</span><span id="line-986">          this.pos += Bytes.SIZEOF_SHORT + curTagLen;</span>
+<span class="source-line-no">987</span><span id="line-987">          return tag;</span>
+<span class="source-line-no">988</span><span id="line-988">        }</span>
+<span class="source-line-no">989</span><span id="line-989">        return null;</span>
+<span class="source-line-no">990</span><span id="line-990">      }</span>
+<span class="source-line-no">991</span><span id="line-991"></span>
+<span class="source-line-no">992</span><span id="line-992">      @Override</span>
+<span class="source-line-no">993</span><span id="line-993">      public void remove() {</span>
+<span class="source-line-no">994</span><span id="line-994">        throw new UnsupportedOperationException();</span>
+<span class="source-line-no">995</span><span id="line-995">      }</span>
+<span class="source-line-no">996</span><span id="line-996">    };</span>
+<span class="source-line-no">997</span><span id="line-997">  }</span>
+<span class="source-line-no">998</span><span id="line-998"></span>
+<span class="source-line-no">999</span><span id="line-999">  public static Iterator&lt;Tag&gt; tagsIterator(final ByteBuffer tags, final int offset,</span>
+<span class="source-line-no">1000</span><span id="line-1000">    final int length) {</span>
+<span class="source-line-no">1001</span><span id="line-1001">    return new Iterator&lt;Tag&gt;() {</span>
+<span class="source-line-no">1002</span><span id="line-1002">      private int pos = offset;</span>
+<span class="source-line-no">1003</span><span id="line-1003">      private int endOffset = offset + length - 1;</span>
+<span class="source-line-no">1004</span><span id="line-1004"></span>
+<span class="source-line-no">1005</span><span id="line-1005">      @Override</span>
+<span class="source-line-no">1006</span><span id="line-1006">      public boolean hasNext() {</span>
+<span class="source-line-no">1007</span><span id="line-1007">        return this.pos &lt; endOffset;</span>
+<span class="source-line-no">1008</span><span id="line-1008">      }</span>
+<span class="source-line-no">1009</span><span id="line-1009"></span>
+<span class="source-line-no">1010</span><span id="line-1010">      @Override</span>
+<span class="source-line-no">1011</span><span id="line-1011">      public Tag next() {</span>
+<span class="source-line-no">1012</span><span id="line-1012">        if (hasNext()) {</span>
+<span class="source-line-no">1013</span><span id="line-1013">          int curTagLen = ByteBufferUtils.readAsInt(tags, this.pos, Tag.TAG_LENGTH_SIZE);</span>
+<span class="source-line-no">1014</span><span id="line-1014">          Tag tag = new ByteBufferTag(tags, pos, curTagLen + Tag.TAG_LENGTH_SIZE);</span>
+<span class="source-line-no">1015</span><span id="line-1015">          this.pos += Bytes.SIZEOF_SHORT + curTagLen;</span>
+<span class="source-line-no">1016</span><span id="line-1016">          return tag;</span>
+<span class="source-line-no">1017</span><span id="line-1017">        }</span>
+<span class="source-line-no">1018</span><span id="line-1018">        return null;</span>
+<span class="source-line-no">1019</span><span id="line-1019">      }</span>
+<span class="source-line-no">1020</span><span id="line-1020"></span>
+<span class="source-line-no">1021</span><span id="line-1021">      @Override</span>
+<span class="source-line-no">1022</span><span id="line-1022">      public void remove() {</span>
+<span class="source-line-no">1023</span><span id="line-1023">        throw new UnsupportedOperationException();</span>
+<span class="source-line-no">1024</span><span id="line-1024">      }</span>
+<span class="source-line-no">1025</span><span id="line-1025">    };</span>
+<span class="source-line-no">1026</span><span id="line-1026">  }</span>
+<span class="source-line-no">1027</span><span id="line-1027"></span>
+<span class="source-line-no">1028</span><span id="line-1028">  /**</span>
+<span class="source-line-no">1029</span><span id="line-1029">   * Returns true if the first range start1...end1 overlaps with the second range start2...end2,</span>
+<span class="source-line-no">1030</span><span id="line-1030">   * assuming the byte arrays represent row keys</span>
+<span class="source-line-no">1031</span><span id="line-1031">   */</span>
+<span class="source-line-no">1032</span><span id="line-1032">  public static boolean overlappingKeys(final byte[] start1, final byte[] end1, final byte[] start2,</span>
+<span class="source-line-no">1033</span><span id="line-1033">    final byte[] end2) {</span>
+<span class="source-line-no">1034</span><span id="line-1034">    return (end2.length == 0 || start1.length == 0 || Bytes.compareTo(start1, end2) &lt; 0)</span>
+<span class="source-line-no">1035</span><span id="line-1035">      &amp;&amp; (end1.length == 0 || start2.length == 0 || Bytes.compareTo(start2, end1) &lt; 0);</span>
+<span class="source-line-no">1036</span><span id="line-1036">  }</span>
+<span class="source-line-no">1037</span><span id="line-1037"></span>
+<span class="source-line-no">1038</span><span id="line-1038">  /** Write rowkey excluding the common part. */</span>
+<span class="source-line-no">1039</span><span id="line-1039">  public static void writeRowKeyExcludingCommon(Cell cell, short rLen, int commonPrefix,</span>
+<span class="source-line-no">1040</span><span id="line-1040">    DataOutputStream out) throws IOException {</span>
+<span class="source-line-no">1041</span><span id="line-1041">    if (commonPrefix == 0) {</span>
+<span class="source-line-no">1042</span><span id="line-1042">      out.writeShort(rLen);</span>
+<span class="source-line-no">1043</span><span id="line-1043">    } else if (commonPrefix == 1) {</span>
+<span class="source-line-no">1044</span><span id="line-1044">      out.writeByte((byte) rLen);</span>
+<span class="source-line-no">1045</span><span id="line-1045">      commonPrefix--;</span>
+<span class="source-line-no">1046</span><span id="line-1046">    } else {</span>
+<span class="source-line-no">1047</span><span id="line-1047">      commonPrefix -= KeyValue.ROW_LENGTH_SIZE;</span>
+<span class="source-line-no">1048</span><span id="line-1048">    }</span>
+<span class="source-line-no">1049</span><span id="line-1049">    if (rLen &gt; commonPrefix) {</span>
+<span class="source-line-no">1050</span><span id="line-1050">      writeRowSkippingBytes(out, cell, rLen, commonPrefix);</span>
+<span class="source-line-no">1051</span><span id="line-1051">    }</span>
+<span class="source-line-no">1052</span><span id="line-1052">  }</span>
+<span class="source-line-no">1053</span><span id="line-1053"></span>
+<span class="source-line-no">1054</span><span id="line-1054">  /**</span>
+<span class="source-line-no">1055</span><span id="line-1055">   * Writes the row from the given cell to the output stream excluding the common prefix</span>
+<span class="source-line-no">1056</span><span id="line-1056">   * @param out     The dataoutputstream to which the data has to be written</span>
+<span class="source-line-no">1057</span><span id="line-1057">   * @param cell    The cell whose contents has to be written</span>
+<span class="source-line-no">1058</span><span id="line-1058">   * @param rlength the row length</span>
+<span class="source-line-no">1059</span><span id="line-1059">   */</span>
+<span class="source-line-no">1060</span><span id="line-1060">  public static void writeRowSkippingBytes(DataOutputStream out, Cell cell, short rlength,</span>
+<span class="source-line-no">1061</span><span id="line-1061">    int commonPrefix) throws IOException {</span>
+<span class="source-line-no">1062</span><span id="line-1062">    if (cell instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">1063</span><span id="line-1063">      ByteBufferUtils.copyBufferToStream((DataOutput) out,</span>
+<span class="source-line-no">1064</span><span id="line-1064">        ((ByteBufferExtendedCell) cell).getRowByteBuffer(),</span>
+<span class="source-line-no">1065</span><span id="line-1065">        ((ByteBufferExtendedCell) cell).getRowPosition() + commonPrefix, rlength - commonPrefix);</span>
+<span class="source-line-no">1066</span><span id="line-1066">    } else {</span>
+<span class="source-line-no">1067</span><span id="line-1067">      out.write(cell.getRowArray(), cell.getRowOffset() + commonPrefix, rlength - commonPrefix);</span>
+<span class="source-line-no">1068</span><span id="line-1068">    }</span>
+<span class="source-line-no">1069</span><span id="line-1069">  }</span>
+<span class="source-line-no">1070</span><span id="line-1070"></span>
+<span class="source-line-no">1071</span><span id="line-1071">  /**</span>
+<span class="source-line-no">1072</span><span id="line-1072">   * Find length of common prefix in keys of the cells, considering key as byte[] if serialized in</span>
+<span class="source-line-no">1073</span><span id="line-1073">   * {@link KeyValue}. The key format is &amp;lt;2 bytes rk len&amp;gt;&amp;lt;rk&amp;gt;&amp;lt;1 byte cf</span>
+<span class="source-line-no">1074</span><span id="line-1074">   * len&amp;gt;&amp;lt;cf&amp;gt;&amp;lt;qualifier&amp;gt;&amp;lt;8 bytes timestamp&amp;gt;&amp;lt;1 byte type&amp;gt;</span>
+<span class="source-line-no">1075</span><span id="line-1075">   * @param c1                the cell</span>
+<span class="source-line-no">1076</span><span id="line-1076">   * @param c2                the cell</span>
+<span class="source-line-no">1077</span><span id="line-1077">   * @param bypassFamilyCheck when true assume the family bytes same in both cells. Pass it as true</span>
+<span class="source-line-no">1078</span><span id="line-1078">   *                          when dealing with Cells in same CF so as to avoid some checks</span>
+<span class="source-line-no">1079</span><span id="line-1079">   * @param withTsType        when true check timestamp and type bytes also.</span>
+<span class="source-line-no">1080</span><span id="line-1080">   * @return length of common prefix</span>
+<span class="source-line-no">1081</span><span id="line-1081">   */</span>
+<span class="source-line-no">1082</span><span id="line-1082">  public static int findCommonPrefixInFlatKey(ExtendedCell c1, ExtendedCell c2,</span>
+<span class="source-line-no">1083</span><span id="line-1083">    boolean bypassFamilyCheck, boolean withTsType) {</span>
+<span class="source-line-no">1084</span><span id="line-1084">    // Compare the 2 bytes in RK length part</span>
+<span class="source-line-no">1085</span><span id="line-1085">    short rLen1 = c1.getRowLength();</span>
+<span class="source-line-no">1086</span><span id="line-1086">    short rLen2 = c2.getRowLength();</span>
+<span class="source-line-no">1087</span><span id="line-1087">    int commonPrefix = KeyValue.ROW_LENGTH_SIZE;</span>
+<span class="source-line-no">1088</span><span id="line-1088">    if (rLen1 != rLen2) {</span>
+<span class="source-line-no">1089</span><span id="line-1089">      // early out when the RK length itself is not matching</span>
+<span class="source-line-no">1090</span><span id="line-1090">      return ByteBufferUtils.findCommonPrefix(Bytes.toBytes(rLen1), 0, KeyValue.ROW_LENGTH_SIZE,</span>
+<span class="source-line-no">1091</span><span id="line-1091">        Bytes.toBytes(rLen2), 0, KeyValue.ROW_LENGTH_SIZE);</span>
+<span class="source-line-no">1092</span><span id="line-1092">    }</span>
+<span class="source-line-no">1093</span><span id="line-1093">    // Compare the RKs</span>
+<span class="source-line-no">1094</span><span id="line-1094">    int rkCommonPrefix = 0;</span>
+<span class="source-line-no">1095</span><span id="line-1095">    if (c1 instanceof ByteBufferExtendedCell &amp;&amp; c2 instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">1096</span><span id="line-1096">      rkCommonPrefix =</span>
+<span class="source-line-no">1097</span><span id="line-1097">        ByteBufferUtils.findCommonPrefix(((ByteBufferExtendedCell) c1).getRowByteBuffer(),</span>
+<span class="source-line-no">1098</span><span id="line-1098">          ((ByteBufferExtendedCell) c1).getRowPosition(), rLen1,</span>
+<span class="source-line-no">1099</span><span id="line-1099">          ((ByteBufferExtendedCell) c2).getRowByteBuffer(),</span>
+<span class="source-line-no">1100</span><span id="line-1100">          ((ByteBufferExtendedCell) c2).getRowPosition(), rLen2);</span>
+<span class="source-line-no">1101</span><span id="line-1101">    } else {</span>
+<span class="source-line-no">1102</span><span id="line-1102">      // There cannot be a case where one cell is BBCell and other is KeyValue. This flow comes</span>
+<span class="source-line-no">1103</span><span id="line-1103">      // either</span>
+<span class="source-line-no">1104</span><span id="line-1104">      // in flush or compactions. In flushes both cells are KV and in case of compaction it will be</span>
+<span class="source-line-no">1105</span><span id="line-1105">      // either</span>
+<span class="source-line-no">1106</span><span id="line-1106">      // KV or BBCell</span>
+<span class="source-line-no">1107</span><span id="line-1107">      rkCommonPrefix = ByteBufferUtils.findCommonPrefix(c1.getRowArray(), c1.getRowOffset(), rLen1,</span>
+<span class="source-line-no">1108</span><span id="line-1108">        c2.getRowArray(), c2.getRowOffset(), rLen2);</span>
+<span class="source-line-no">1109</span><span id="line-1109">    }</span>
+<span class="source-line-no">1110</span><span id="line-1110">    commonPrefix += rkCommonPrefix;</span>
+<span class="source-line-no">1111</span><span id="line-1111">    if (rkCommonPrefix != rLen1) {</span>
+<span class="source-line-no">1112</span><span id="line-1112">      // Early out when RK is not fully matching.</span>
+<span class="source-line-no">1113</span><span id="line-1113">      return commonPrefix;</span>
+<span class="source-line-no">1114</span><span id="line-1114">    }</span>
+<span class="source-line-no">1115</span><span id="line-1115">    // Compare 1 byte CF length part</span>
+<span class="source-line-no">1116</span><span id="line-1116">    byte fLen1 = c1.getFamilyLength();</span>
+<span class="source-line-no">1117</span><span id="line-1117">    if (bypassFamilyCheck) {</span>
+<span class="source-line-no">1118</span><span id="line-1118">      // This flag will be true when caller is sure that the family will be same for both the cells</span>
+<span class="source-line-no">1119</span><span id="line-1119">      // Just make commonPrefix to increment by the family part</span>
+<span class="source-line-no">1120</span><span id="line-1120">      commonPrefix += KeyValue.FAMILY_LENGTH_SIZE + fLen1;</span>
+<span class="source-line-no">1121</span><span id="line-1121">    } else {</span>
+<span class="source-line-no">1122</span><span id="line-1122">      byte fLen2 = c2.getFamilyLength();</span>
+<span class="source-line-no">1123</span><span id="line-1123">      if (fLen1 != fLen2) {</span>
+<span class="source-line-no">1124</span><span id="line-1124">        // early out when the CF length itself is not matching</span>
+<span class="source-line-no">1125</span><span id="line-1125">        return commonPrefix;</span>
+<span class="source-line-no">1126</span><span id="line-1126">      }</span>
+<span class="source-line-no">1127</span><span id="line-1127">      // CF lengths are same so there is one more byte common in key part</span>
+<span class="source-line-no">1128</span><span id="line-1128">      commonPrefix += KeyValue.FAMILY_LENGTH_SIZE;</span>
+<span class="source-line-no">1129</span><span id="line-1129">      // Compare the CF names</span>
+<span class="source-line-no">1130</span><span id="line-1130">      int fCommonPrefix;</span>
+<span class="source-line-no">1131</span><span id="line-1131">      if (c1 instanceof ByteBufferExtendedCell &amp;&amp; c2 instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">1132</span><span id="line-1132">        fCommonPrefix =</span>
+<span class="source-line-no">1133</span><span id="line-1133">          ByteBufferUtils.findCommonPrefix(((ByteBufferExtendedCell) c1).getFamilyByteBuffer(),</span>
+<span class="source-line-no">1134</span><span id="line-1134">            ((ByteBufferExtendedCell) c1).getFamilyPosition(), fLen1,</span>
+<span class="source-line-no">1135</span><span id="line-1135">            ((ByteBufferExtendedCell) c2).getFamilyByteBuffer(),</span>
+<span class="source-line-no">1136</span><span id="line-1136">            ((ByteBufferExtendedCell) c2).getFamilyPosition(), fLen2);</span>
+<span class="source-line-no">1137</span><span id="line-1137">      } else {</span>
+<span class="source-line-no">1138</span><span id="line-1138">        fCommonPrefix = ByteBufferUtils.findCommonPrefix(c1.getFamilyArray(), c1.getFamilyOffset(),</span>
+<span class="source-line-no">1139</span><span id="line-1139">          fLen1, c2.getFamilyArray(), c2.getFamilyOffset(), fLen2);</span>
+<span class="source-line-no">1140</span><span id="line-1140">      }</span>
+<span class="source-line-no">1141</span><span id="line-1141">      commonPrefix += fCommonPrefix;</span>
+<span class="source-line-no">1142</span><span id="line-1142">      if (fCommonPrefix != fLen1) {</span>
+<span class="source-line-no">1143</span><span id="line-1143">        return commonPrefix;</span>
+<span class="source-line-no">1144</span><span id="line-1144">      }</span>
+<span class="source-line-no">1145</span><span id="line-1145">    }</span>
+<span class="source-line-no">1146</span><span id="line-1146">    // Compare the Qualifiers</span>
+<span class="source-line-no">1147</span><span id="line-1147">    int qLen1 = c1.getQualifierLength();</span>
+<span class="source-line-no">1148</span><span id="line-1148">    int qLen2 = c2.getQualifierLength();</span>
+<span class="source-line-no">1149</span><span id="line-1149">    int qCommon;</span>
+<span class="source-line-no">1150</span><span id="line-1150">    if (c1 instanceof ByteBufferExtendedCell &amp;&amp; c2 instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">1151</span><span id="line-1151">      qCommon =</span>
+<span class="source-line-no">1152</span><span id="line-1152">        ByteBufferUtils.findCommonPrefix(((ByteBufferExtendedCell) c1).getQualifierByteBuffer(),</span>
+<span class="source-line-no">1153</span><span id="line-1153">          ((ByteBufferExtendedCell) c1).getQualifierPosition(), qLen1,</span>
+<span class="source-line-no">1154</span><span id="line-1154">          ((ByteBufferExtendedCell) c2).getQualifierByteBuffer(),</span>
+<span class="source-line-no">1155</span><span id="line-1155">          ((ByteBufferExtendedCell) c2).getQualifierPosition(), qLen2);</span>
+<span class="source-line-no">1156</span><span id="line-1156">    } else {</span>
+<span class="source-line-no">1157</span><span id="line-1157">      qCommon = ByteBufferUtils.findCommonPrefix(c1.getQualifierArray(), c1.getQualifierOffset(),</span>
+<span class="source-line-no">1158</span><span id="line-1158">        qLen1, c2.getQualifierArray(), c2.getQualifierOffset(), qLen2);</span>
+<span class="source-line-no">1159</span><span id="line-1159">    }</span>
+<span class="source-line-no">1160</span><span id="line-1160">    commonPrefix += qCommon;</span>
+<span class="source-line-no">1161</span><span id="line-1161">    if (!withTsType || Math.max(qLen1, qLen2) != qCommon) {</span>
+<span class="source-line-no">1162</span><span id="line-1162">      return commonPrefix;</span>
+<span class="source-line-no">1163</span><span id="line-1163">    }</span>
+<span class="source-line-no">1164</span><span id="line-1164">    // Compare the timestamp parts</span>
+<span class="source-line-no">1165</span><span id="line-1165">    int tsCommonPrefix = ByteBufferUtils.findCommonPrefix(Bytes.toBytes(c1.getTimestamp()), 0,</span>
+<span class="source-line-no">1166</span><span id="line-1166">      KeyValue.TIMESTAMP_SIZE, Bytes.toBytes(c2.getTimestamp()), 0, KeyValue.TIMESTAMP_SIZE);</span>
+<span class="source-line-no">1167</span><span id="line-1167">    commonPrefix += tsCommonPrefix;</span>
+<span class="source-line-no">1168</span><span id="line-1168">    if (tsCommonPrefix != KeyValue.TIMESTAMP_SIZE) {</span>
+<span class="source-line-no">1169</span><span id="line-1169">      return commonPrefix;</span>
+<span class="source-line-no">1170</span><span id="line-1170">    }</span>
+<span class="source-line-no">1171</span><span id="line-1171">    // Compare the type</span>
+<span class="source-line-no">1172</span><span id="line-1172">    if (c1.getTypeByte() == c2.getTypeByte()) {</span>
+<span class="source-line-no">1173</span><span id="line-1173">      commonPrefix += KeyValue.TYPE_SIZE;</span>
+<span class="source-line-no">1174</span><span id="line-1174">    }</span>
+<span class="source-line-no">1175</span><span id="line-1175">    return commonPrefix;</span>
+<span class="source-line-no">1176</span><span id="line-1176">  }</span>
+<span class="source-line-no">1177</span><span id="line-1177"></span>
+<span class="source-line-no">1178</span><span id="line-1178">  /**</span>
+<span class="source-line-no">1179</span><span id="line-1179">   * Used to compare two cells based on the column hint provided. This is specifically used when we</span>
+<span class="source-line-no">1180</span><span id="line-1180">   * need to optimize the seeks based on the next indexed key. This is an advanced usage API</span>
+<span class="source-line-no">1181</span><span id="line-1181">   * specifically needed for some optimizations.</span>
+<span class="source-line-no">1182</span><span id="line-1182">   * @param nextIndexedCell the next indexed cell</span>
+<span class="source-line-no">1183</span><span id="line-1183">   * @param currentCell     the cell to be compared</span>
+<span class="source-line-no">1184</span><span id="line-1184">   * @param foff            the family offset of the currentCell</span>
+<span class="source-line-no">1185</span><span id="line-1185">   * @param flen            the family length of the currentCell</span>
+<span class="source-line-no">1186</span><span id="line-1186">   * @param colHint         the column hint provided - could be null</span>
+<span class="source-line-no">1187</span><span id="line-1187">   * @param coff            the offset of the column hint if provided, if not offset of the</span>
+<span class="source-line-no">1188</span><span id="line-1188">   *                        currentCell's qualifier</span>
+<span class="source-line-no">1189</span><span id="line-1189">   * @param clen            the length of the column hint if provided, if not length of the</span>
+<span class="source-line-no">1190</span><span id="line-1190">   *                        currentCell's qualifier</span>
+<span class="source-line-no">1191</span><span id="line-1191">   * @param ts              the timestamp to be seeked</span>
+<span class="source-line-no">1192</span><span id="line-1192">   * @param type            the type to be seeked</span>
+<span class="source-line-no">1193</span><span id="line-1193">   * @return an int based on the given column hint TODO : To be moved out of here because this is a</span>
+<span class="source-line-no">1194</span><span id="line-1194">   *         special API used in scan optimization.</span>
+<span class="source-line-no">1195</span><span id="line-1195">   */</span>
+<span class="source-line-no">1196</span><span id="line-1196">  // compare a key against row/fam/qual/ts/type</span>
+<span class="source-line-no">1197</span><span id="line-1197">  public static final int compareKeyBasedOnColHint(CellComparator comparator,</span>
+<span class="source-line-no">1198</span><span id="line-1198">    ExtendedCell nextIndexedCell, ExtendedCell currentCell, int foff, int flen, byte[] colHint,</span>
+<span class="source-line-no">1199</span><span id="line-1199">    int coff, int clen, long ts, byte type) {</span>
+<span class="source-line-no">1200</span><span id="line-1200">    int compare = comparator.compareRows(nextIndexedCell, currentCell);</span>
+<span class="source-line-no">1201</span><span id="line-1201">    if (compare != 0) {</span>
+<span class="source-line-no">1202</span><span id="line-1202">      return compare;</span>
+<span class="source-line-no">1203</span><span id="line-1203">    }</span>
+<span class="source-line-no">1204</span><span id="line-1204">    // If the column is not specified, the "minimum" key type appears the</span>
+<span class="source-line-no">1205</span><span id="line-1205">    // latest in the sorted order, regardless of the timestamp. This is used</span>
+<span class="source-line-no">1206</span><span id="line-1206">    // for specifying the last key/value in a given row, because there is no</span>
+<span class="source-line-no">1207</span><span id="line-1207">    // "lexicographically last column" (it would be infinitely long). The</span>
+<span class="source-line-no">1208</span><span id="line-1208">    // "maximum" key type does not need this behavior.</span>
+<span class="source-line-no">1209</span><span id="line-1209">    if (</span>
+<span class="source-line-no">1210</span><span id="line-1210">      nextIndexedCell.getFamilyLength() + nextIndexedCell.getQualifierLength() == 0</span>
+<span class="source-line-no">1211</span><span id="line-1211">        &amp;&amp; nextIndexedCell.getTypeByte() == KeyValue.Type.Minimum.getCode()</span>
+<span class="source-line-no">1212</span><span id="line-1212">    ) {</span>
+<span class="source-line-no">1213</span><span id="line-1213">      // left is "bigger", i.e. it appears later in the sorted order</span>
+<span class="source-line-no">1214</span><span id="line-1214">      return 1;</span>
+<span class="source-line-no">1215</span><span id="line-1215">    }</span>
+<span class="source-line-no">1216</span><span id="line-1216">    if (flen + clen == 0 &amp;&amp; type == KeyValue.Type.Minimum.getCode()) {</span>
+<span class="source-line-no">1217</span><span id="line-1217">      return -1;</span>
+<span class="source-line-no">1218</span><span id="line-1218">    }</span>
+<span class="source-line-no">1219</span><span id="line-1219"></span>
+<span class="source-line-no">1220</span><span id="line-1220">    compare = comparator.compareFamilies(nextIndexedCell, currentCell);</span>
+<span class="source-line-no">1221</span><span id="line-1221">    if (compare != 0) {</span>
+<span class="source-line-no">1222</span><span id="line-1222">      return compare;</span>
+<span class="source-line-no">1223</span><span id="line-1223">    }</span>
+<span class="source-line-no">1224</span><span id="line-1224">    if (colHint == null) {</span>
+<span class="source-line-no">1225</span><span id="line-1225">      compare = comparator.compareQualifiers(nextIndexedCell, currentCell);</span>
+<span class="source-line-no">1226</span><span id="line-1226">    } else {</span>
+<span class="source-line-no">1227</span><span id="line-1227">      compare = CellUtil.compareQualifiers(nextIndexedCell, colHint, coff, clen);</span>
+<span class="source-line-no">1228</span><span id="line-1228">    }</span>
+<span class="source-line-no">1229</span><span id="line-1229">    if (compare != 0) {</span>
+<span class="source-line-no">1230</span><span id="line-1230">      return compare;</span>
+<span class="source-line-no">1231</span><span id="line-1231">    }</span>
+<span class="source-line-no">1232</span><span id="line-1232">    // Next compare timestamps.</span>
+<span class="source-line-no">1233</span><span id="line-1233">    compare = comparator.compareTimestamps(nextIndexedCell.getTimestamp(), ts);</span>
+<span class="source-line-no">1234</span><span id="line-1234">    if (compare != 0) {</span>
+<span class="source-line-no">1235</span><span id="line-1235">      return compare;</span>
+<span class="source-line-no">1236</span><span id="line-1236">    }</span>
+<span class="source-line-no">1237</span><span id="line-1237"></span>
+<span class="source-line-no">1238</span><span id="line-1238">    // Compare types. Let the delete types sort ahead of puts; i.e. types</span>
+<span class="source-line-no">1239</span><span id="line-1239">    // of higher numbers sort before those of lesser numbers. Maximum (255)</span>
+<span class="source-line-no">1240</span><span id="line-1240">    // appears ahead of everything, and minimum (0) appears after</span>
+<span class="source-line-no">1241</span><span id="line-1241">    // everything.</span>
+<span class="source-line-no">1242</span><span id="line-1242">    return (0xff &amp; type) - (0xff &amp; nextIndexedCell.getTypeByte());</span>
+<span class="source-line-no">1243</span><span id="line-1243">  }</span>
+<span class="source-line-no">1244</span><span id="line-1244"></span>
+<span class="source-line-no">1245</span><span id="line-1245">  /**</span>
+<span class="source-line-no">1246</span><span id="line-1246">   * Compares only the key portion of a cell. It does not include the sequence id/mvcc of the cell</span>
+<span class="source-line-no">1247</span><span id="line-1247">   * @return an int greater than 0 if left &amp;gt; than right lesser than 0 if left &amp;lt; than right</span>
+<span class="source-line-no">1248</span><span id="line-1248">   *         equal to 0 if left is equal to right</span>
+<span class="source-line-no">1249</span><span id="line-1249">   */</span>
+<span class="source-line-no">1250</span><span id="line-1250">  public static final int compareKeyIgnoresMvcc(CellComparator comparator, Cell left, Cell right) {</span>
+<span class="source-line-no">1251</span><span id="line-1251">    return ((CellComparatorImpl) comparator).compare(left, right, true);</span>
+<span class="source-line-no">1252</span><span id="line-1252">  }</span>
+<span class="source-line-no">1253</span><span id="line-1253"></span>
+<span class="source-line-no">1254</span><span id="line-1254">  /**</span>
+<span class="source-line-no">1255</span><span id="line-1255">   * Compare cell's row against given comparator</span>
+<span class="source-line-no">1256</span><span id="line-1256">   * @param cell       the cell to use for comparison</span>
+<span class="source-line-no">1257</span><span id="line-1257">   * @param comparator the {@link CellComparator} to use for comparison</span>
+<span class="source-line-no">1258</span><span id="line-1258">   * @return result comparing cell's row</span>
+<span class="source-line-no">1259</span><span id="line-1259">   */</span>
+<span class="source-line-no">1260</span><span id="line-1260">  public static int compareRow(Cell cell, ByteArrayComparable comparator) {</span>
+<span class="source-line-no">1261</span><span id="line-1261">    if (cell instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">1262</span><span id="line-1262">      return comparator.compareTo(((ByteBufferExtendedCell) cell).getRowByteBuffer(),</span>
+<span class="source-line-no">1263</span><span id="line-1263">        ((ByteBufferExtendedCell) cell).getRowPosition(), cell.getRowLength());</span>
+<span class="source-line-no">1264</span><span id="line-1264">    }</span>
+<span class="source-line-no">1265</span><span id="line-1265">    return comparator.compareTo(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength());</span>
+<span class="source-line-no">1266</span><span id="line-1266">  }</span>
+<span class="source-line-no">1267</span><span id="line-1267"></span>
+<span class="source-line-no">1268</span><span id="line-1268">  /**</span>
+<span class="source-line-no">1269</span><span id="line-1269">   * Compare cell's column family against given comparator</span>
+<span class="source-line-no">1270</span><span id="line-1270">   * @param cell       the cell to use for comparison</span>
+<span class="source-line-no">1271</span><span id="line-1271">   * @param comparator the {@link CellComparator} to use for comparison</span>
+<span class="source-line-no">1272</span><span id="line-1272">   * @return result comparing cell's column family</span>
+<span class="source-line-no">1273</span><span id="line-1273">   */</span>
+<span class="source-line-no">1274</span><span id="line-1274">  public static int compareFamily(Cell cell, ByteArrayComparable comparator) {</span>
+<span class="source-line-no">1275</span><span id="line-1275">    if (cell instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">1276</span><span id="line-1276">      return comparator.compareTo(((ByteBufferExtendedCell) cell).getFamilyByteBuffer(),</span>
+<span class="source-line-no">1277</span><span id="line-1277">        ((ByteBufferExtendedCell) cell).getFamilyPosition(), cell.getFamilyLength());</span>
+<span class="source-line-no">1278</span><span id="line-1278">    }</span>
+<span class="source-line-no">1279</span><span id="line-1279">    return comparator.compareTo(cell.getFamilyArray(), cell.getFamilyOffset(),</span>
+<span class="source-line-no">1280</span><span id="line-1280">      cell.getFamilyLength());</span>
+<span class="source-line-no">1281</span><span id="line-1281">  }</span>
+<span class="source-line-no">1282</span><span id="line-1282"></span>
+<span class="source-line-no">1283</span><span id="line-1283">  /**</span>
+<span class="source-line-no">1284</span><span id="line-1284">   * Compare cell's qualifier against given comparator</span>
+<span class="source-line-no">1285</span><span id="line-1285">   * @param cell       the cell to use for comparison</span>
+<span class="source-line-no">1286</span><span id="line-1286">   * @param comparator the {@link CellComparator} to use for comparison</span>
+<span class="source-line-no">1287</span><span id="line-1287">   * @return result comparing cell's qualifier</span>
+<span class="source-line-no">1288</span><span id="line-1288">   */</span>
+<span class="source-line-no">1289</span><span id="line-1289">  public static int compareQualifier(Cell cell, ByteArrayComparable comparator) {</span>
+<span class="source-line-no">1290</span><span id="line-1290">    if (cell instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">1291</span><span id="line-1291">      return comparator.compareTo(((ByteBufferExtendedCell) cell).getQualifierByteBuffer(),</span>
+<span class="source-line-no">1292</span><span id="line-1292">        ((ByteBufferExtendedCell) cell).getQualifierPosition(), cell.getQualifierLength());</span>
+<span class="source-line-no">1293</span><span id="line-1293">    }</span>
+<span class="source-line-no">1294</span><span id="line-1294">    return comparator.compareTo(cell.getQualifierArray(), cell.getQualifierOffset(),</span>
+<span class="source-line-no">1295</span><span id="line-1295">      cell.getQualifierLength());</span>
+<span class="source-line-no">1296</span><span id="line-1296">  }</span>
+<span class="source-line-no">1297</span><span id="line-1297"></span>
+<span class="source-line-no">1298</span><span id="line-1298">  public static Cell.Type toType(byte type) {</span>
+<span class="source-line-no">1299</span><span id="line-1299">    KeyValue.Type codeToType = KeyValue.Type.codeToType(type);</span>
+<span class="source-line-no">1300</span><span id="line-1300">    switch (codeToType) {</span>
+<span class="source-line-no">1301</span><span id="line-1301">      case Put:</span>
+<span class="source-line-no">1302</span><span id="line-1302">        return Cell.Type.Put;</span>
+<span class="source-line-no">1303</span><span id="line-1303">      case Delete:</span>
+<span class="source-line-no">1304</span><span id="line-1304">        return Cell.Type.Delete;</span>
+<span class="source-line-no">1305</span><span id="line-1305">      case DeleteColumn:</span>
+<span class="source-line-no">1306</span><span id="line-1306">        return Cell.Type.DeleteColumn;</span>
+<span class="source-line-no">1307</span><span id="line-1307">      case DeleteFamily:</span>
+<span class="source-line-no">1308</span><span id="line-1308">        return Cell.Type.DeleteFamily;</span>
+<span class="source-line-no">1309</span><span id="line-1309">      case DeleteFamilyVersion:</span>
+<span class="source-line-no">1310</span><span id="line-1310">        return Cell.Type.DeleteFamilyVersion;</span>
+<span class="source-line-no">1311</span><span id="line-1311">      default:</span>
+<span class="source-line-no">1312</span><span id="line-1312">        throw new UnsupportedOperationException("Invalid type of cell " + type);</span>
+<span class="source-line-no">1313</span><span id="line-1313">    }</span>
+<span class="source-line-no">1314</span><span id="line-1314">  }</span>
+<span class="source-line-no">1315</span><span id="line-1315"></span>
+<span class="source-line-no">1316</span><span id="line-1316">  public static KeyValue.Type toTypeByte(Cell.Type type) {</span>
+<span class="source-line-no">1317</span><span id="line-1317">    switch (type) {</span>
+<span class="source-line-no">1318</span><span id="line-1318">      case Put:</span>
+<span class="source-line-no">1319</span><span id="line-1319">        return KeyValue.Type.Put;</span>
+<span class="source-line-no">1320</span><span id="line-1320">      case Delete:</span>
+<span class="source-line-no">1321</span><span id="line-1321">        return KeyValue.Type.Delete;</span>
+<span class="source-line-no">1322</span><span id="line-1322">      case DeleteColumn:</span>
+<span class="source-line-no">1323</span><span id="line-1323">        return KeyValue.Type.DeleteColumn;</span>
+<span class="source-line-no">1324</span><span id="line-1324">      case DeleteFamilyVersion:</span>
+<span class="source-line-no">1325</span><span id="line-1325">        return KeyValue.Type.DeleteFamilyVersion;</span>
+<span class="source-line-no">1326</span><span id="line-1326">      case DeleteFamily:</span>
+<span class="source-line-no">1327</span><span id="line-1327">        return KeyValue.Type.DeleteFamily;</span>
+<span class="source-line-no">1328</span><span id="line-1328">      default:</span>
+<span class="source-line-no">1329</span><span id="line-1329">        throw new UnsupportedOperationException("Unsupported data type:" + type);</span>
+<span class="source-line-no">1330</span><span id="line-1330">    }</span>
+<span class="source-line-no">1331</span><span id="line-1331">  }</span>
+<span class="source-line-no">1332</span><span id="line-1332"></span>
+<span class="source-line-no">1333</span><span id="line-1333">  /**</span>
+<span class="source-line-no">1334</span><span id="line-1334">   * Compare cell's value against given comparator</span>
+<span class="source-line-no">1335</span><span id="line-1335">   * @param cell       the cell to use for comparison</span>
+<span class="source-line-no">1336</span><span id="line-1336">   * @param comparator the {@link CellComparator} to use for comparison</span>
+<span class="source-line-no">1337</span><span id="line-1337">   * @return result comparing cell's value</span>
+<span class="source-line-no">1338</span><span id="line-1338">   */</span>
+<span class="source-line-no">1339</span><span id="line-1339">  public static int compareValue(Cell cell, ByteArrayComparable comparator) {</span>
+<span class="source-line-no">1340</span><span id="line-1340">    if (cell instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">1341</span><span id="line-1341">      return comparator.compareTo(((ByteBufferExtendedCell) cell).getValueByteBuffer(),</span>
+<span class="source-line-no">1342</span><span id="line-1342">        ((ByteBufferExtendedCell) cell).getValuePosition(), cell.getValueLength());</span>
+<span class="source-line-no">1343</span><span id="line-1343">    }</span>
+<span class="source-line-no">1344</span><span id="line-1344">    return comparator.compareTo(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());</span>
+<span class="source-line-no">1345</span><span id="line-1345">  }</span>
+<span class="source-line-no">1346</span><span id="line-1346"></span>
+<span class="source-line-no">1347</span><span id="line-1347">  /**</span>
+<span class="source-line-no">1348</span><span id="line-1348">   * These cells are used in reseeks/seeks to improve the read performance. They are not real cells</span>
+<span class="source-line-no">1349</span><span id="line-1349">   * that are returned back to the clients</span>
+<span class="source-line-no">1350</span><span id="line-1350">   */</span>
+<span class="source-line-no">1351</span><span id="line-1351">  private static abstract class EmptyCell implements ExtendedCell {</span>
+<span class="source-line-no">1352</span><span id="line-1352"></span>
+<span class="source-line-no">1353</span><span id="line-1353">    @Override</span>
+<span class="source-line-no">1354</span><span id="line-1354">    public void setSequenceId(long seqId) {</span>
+<span class="source-line-no">1355</span><span id="line-1355">      // Fake cells don't need seqId, so leaving it as a noop.</span>
+<span class="source-line-no">1356</span><span id="line-1356">    }</span>
+<span class="source-line-no">1357</span><span id="line-1357"></span>
+<span class="source-line-no">1358</span><span id="line-1358">    @Override</span>
+<span class="source-line-no">1359</span><span id="line-1359">    public void setTimestamp(long ts) {</span>
+<span class="source-line-no">1360</span><span id="line-1360">      // Fake cells can't be changed timestamp, so leaving it as a noop.</span>
+<span class="source-line-no">1361</span><span id="line-1361">    }</span>
+<span class="source-line-no">1362</span><span id="line-1362"></span>
+<span class="source-line-no">1363</span><span id="line-1363">    @Override</span>
+<span class="source-line-no">1364</span><span id="line-1364">    public void setTimestamp(byte[] ts) {</span>
+<span class="source-line-no">1365</span><span id="line-1365">      // Fake cells can't be changed timestamp, so leaving it as a noop.</span>
+<span class="source-line-no">1366</span><span id="line-1366">    }</span>
+<span class="source-line-no">1367</span><span id="line-1367"></span>
+<span class="source-line-no">1368</span><span id="line-1368">    @Override</span>
+<span class="source-line-no">1369</span><span id="line-1369">    public byte[] getRowArray() {</span>
+<span class="source-line-no">1370</span><span id="line-1370">      return EMPTY_BYTE_ARRAY;</span>
+<span class="source-line-no">1371</span><span id="line-1371">    }</span>
+<span class="source-line-no">1372</span><span id="line-1372"></span>
+<span class="source-line-no">1373</span><span id="line-1373">    @Override</span>
+<span class="source-line-no">1374</span><span id="line-1374">    public int getRowOffset() {</span>
+<span class="source-line-no">1375</span><span id="line-1375">      return 0;</span>
+<span class="source-line-no">1376</span><span id="line-1376">    }</span>
+<span class="source-line-no">1377</span><span id="line-1377"></span>
+<span class="source-line-no">1378</span><span id="line-1378">    @Override</span>
+<span class="source-line-no">1379</span><span id="line-1379">    public short getRowLength() {</span>
+<span class="source-line-no">1380</span><span id="line-1380">      return 0;</span>
+<span class="source-line-no">1381</span><span id="line-1381">    }</span>
+<span class="source-line-no">1382</span><span id="line-1382"></span>
+<span class="source-line-no">1383</span><span id="line-1383">    @Override</span>
+<span class="source-line-no">1384</span><span id="line-1384">    public byte[] getFamilyArray() {</span>
+<span class="source-line-no">1385</span><span id="line-1385">      return EMPTY_BYTE_ARRAY;</span>
+<span class="source-line-no">1386</span><span id="line-1386">    }</span>
+<span class="source-line-no">1387</span><span id="line-1387"></span>
+<span class="source-line-no">1388</span><span id="line-1388">    @Override</span>
+<span class="source-line-no">1389</span><span id="line-1389">    public int getFamilyOffset() {</span>
+<span class="source-line-no">1390</span><span id="line-1390">      return 0;</span>
+<span class="source-line-no">1391</span><span id="line-1391">    }</span>
+<span class="source-line-no">1392</span><span id="line-1392"></span>
+<span class="source-line-no">1393</span><span id="line-1393">    @Override</span>
+<span class="source-line-no">1394</span><span id="line-1394">    public byte getFamilyLength() {</span>
+<span class="source-line-no">1395</span><span id="line-1395">      return 0;</span>
+<span class="source-line-no">1396</span><span id="line-1396">    }</span>
+<span class="source-line-no">1397</span><span id="line-1397"></span>
+<span class="source-line-no">1398</span><span id="line-1398">    @Override</span>
+<span class="source-line-no">1399</span><span id="line-1399">    public byte[] getQualifierArray() {</span>
+<span class="source-line-no">1400</span><span id="line-1400">      return EMPTY_BYTE_ARRAY;</span>
+<span class="source-line-no">1401</span><span id="line-1401">    }</span>
+<span class="source-line-no">1402</span><span id="line-1402"></span>
+<span class="source-line-no">1403</span><span id="line-1403">    @Override</span>
+<span class="source-line-no">1404</span><span id="line-1404">    public int getQualifierOffset() {</span>
+<span class="source-line-no">1405</span><span id="line-1405">      return 0;</span>
+<span class="source-line-no">1406</span><span id="line-1406">    }</span>
+<span class="source-line-no">1407</span><span id="line-1407"></span>
+<span class="source-line-no">1408</span><span id="line-1408">    @Override</span>
+<span class="source-line-no">1409</span><span id="line-1409">    public int getQualifierLength() {</span>
+<span class="source-line-no">1410</span><span id="line-1410">      return 0;</span>
+<span class="source-line-no">1411</span><span id="line-1411">    }</span>
+<span class="source-line-no">1412</span><span id="line-1412"></span>
+<span class="source-line-no">1413</span><span id="line-1413">    @Override</span>
+<span class="source-line-no">1414</span><span id="line-1414">    public long getSequenceId() {</span>
+<span class="source-line-no">1415</span><span id="line-1415">      return 0;</span>
+<span class="source-line-no">1416</span><span id="line-1416">    }</span>
+<span class="source-line-no">1417</span><span id="line-1417"></span>
+<span class="source-line-no">1418</span><span id="line-1418">    @Override</span>
+<span class="source-line-no">1419</span><span id="line-1419">    public byte[] getValueArray() {</span>
+<span class="source-line-no">1420</span><span id="line-1420">      return EMPTY_BYTE_ARRAY;</span>
+<span class="source-line-no">1421</span><span id="line-1421">    }</span>
+<span class="source-line-no">1422</span><span id="line-1422"></span>
+<span class="source-line-no">1423</span><span id="line-1423">    @Override</span>
+<span class="source-line-no">1424</span><span id="line-1424">    public int getValueOffset() {</span>
+<span class="source-line-no">1425</span><span id="line-1425">      return 0;</span>
+<span class="source-line-no">1426</span><span id="line-1426">    }</span>
+<span class="source-line-no">1427</span><span id="line-1427"></span>
+<span class="source-line-no">1428</span><span id="line-1428">    @Override</span>
+<span class="source-line-no">1429</span><span id="line-1429">    public int getValueLength() {</span>
+<span class="source-line-no">1430</span><span id="line-1430">      return 0;</span>
+<span class="source-line-no">1431</span><span id="line-1431">    }</span>
+<span class="source-line-no">1432</span><span id="line-1432"></span>
+<span class="source-line-no">1433</span><span id="line-1433">    @Override</span>
+<span class="source-line-no">1434</span><span id="line-1434">    public byte[] getTagsArray() {</span>
+<span class="source-line-no">1435</span><span id="line-1435">      return EMPTY_BYTE_ARRAY;</span>
+<span class="source-line-no">1436</span><span id="line-1436">    }</span>
+<span class="source-line-no">1437</span><span id="line-1437"></span>
+<span class="source-line-no">1438</span><span id="line-1438">    @Override</span>
+<span class="source-line-no">1439</span><span id="line-1439">    public int getTagsOffset() {</span>
+<span class="source-line-no">1440</span><span id="line-1440">      return 0;</span>
+<span class="source-line-no">1441</span><span id="line-1441">    }</span>
+<span class="source-line-no">1442</span><span id="line-1442"></span>
+<span class="source-line-no">1443</span><span id="line-1443">    @Override</span>
+<span class="source-line-no">1444</span><span id="line-1444">    public int getTagsLength() {</span>
+<span class="source-line-no">1445</span><span id="line-1445">      return 0;</span>
+<span class="source-line-no">1446</span><span id="line-1446">    }</span>
+<span class="source-line-no">1447</span><span id="line-1447">  }</span>
+<span class="source-line-no">1448</span><span id="line-1448"></span>
+<span class="source-line-no">1449</span><span id="line-1449">  /**</span>
+<span class="source-line-no">1450</span><span id="line-1450">   * These cells are used in reseeks/seeks to improve the read performance. They are not real cells</span>
+<span class="source-line-no">1451</span><span id="line-1451">   * that are returned back to the clients</span>
+<span class="source-line-no">1452</span><span id="line-1452">   */</span>
+<span class="source-line-no">1453</span><span id="line-1453">  private static abstract class EmptyByteBufferExtendedCell extends ByteBufferExtendedCell {</span>
+<span class="source-line-no">1454</span><span id="line-1454"></span>
+<span class="source-line-no">1455</span><span id="line-1455">    @Override</span>
+<span class="source-line-no">1456</span><span id="line-1456">    public void setSequenceId(long seqId) {</span>
+<span class="source-line-no">1457</span><span id="line-1457">      // Fake cells don't need seqId, so leaving it as a noop.</span>
+<span class="source-line-no">1458</span><span id="line-1458">    }</span>
+<span class="source-line-no">1459</span><span id="line-1459"></span>
+<span class="source-line-no">1460</span><span id="line-1460">    @Override</span>
+<span class="source-line-no">1461</span><span id="line-1461">    public void setTimestamp(long ts) {</span>
+<span class="source-line-no">1462</span><span id="line-1462">      // Fake cells can't be changed timestamp, so leaving it as a noop.</span>
+<span class="source-line-no">1463</span><span id="line-1463">    }</span>
+<span class="source-line-no">1464</span><span id="line-1464"></span>
+<span class="source-line-no">1465</span><span id="line-1465">    @Override</span>
+<span class="source-line-no">1466</span><span id="line-1466">    public void setTimestamp(byte[] ts) {</span>
+<span class="source-line-no">1467</span><span id="line-1467">      // Fake cells can't be changed timestamp, so leaving it as a noop.</span>
+<span class="source-line-no">1468</span><span id="line-1468">    }</span>
+<span class="source-line-no">1469</span><span id="line-1469"></span>
+<span class="source-line-no">1470</span><span id="line-1470">    @Override</span>
+<span class="source-line-no">1471</span><span id="line-1471">    public byte[] getRowArray() {</span>
+<span class="source-line-no">1472</span><span id="line-1472">      return CellUtil.cloneRow(this);</span>
+<span class="source-line-no">1473</span><span id="line-1473">    }</span>
+<span class="source-line-no">1474</span><span id="line-1474"></span>
+<span class="source-line-no">1475</span><span id="line-1475">    @Override</span>
+<span class="source-line-no">1476</span><span id="line-1476">    public int getRowOffset() {</span>
+<span class="source-line-no">1477</span><span id="line-1477">      return 0;</span>
+<span class="source-line-no">1478</span><span id="line-1478">    }</span>
+<span class="source-line-no">1479</span><span id="line-1479"></span>
+<span class="source-line-no">1480</span><span id="line-1480">    @Override</span>
+<span class="source-line-no">1481</span><span id="line-1481">    public short getRowLength() {</span>
+<span class="source-line-no">1482</span><span id="line-1482">      return 0;</span>
+<span class="source-line-no">1483</span><span id="line-1483">    }</span>
+<span class="source-line-no">1484</span><span id="line-1484"></span>
+<span class="source-line-no">1485</span><span id="line-1485">    @Override</span>
+<span class="source-line-no">1486</span><span id="line-1486">    public byte[] getFamilyArray() {</span>
+<span class="source-line-no">1487</span><span id="line-1487">      return CellUtil.cloneFamily(this);</span>
+<span class="source-line-no">1488</span><span id="line-1488">    }</span>
+<span class="source-line-no">1489</span><span id="line-1489"></span>
+<span class="source-line-no">1490</span><span id="line-1490">    @Override</span>
+<span class="source-line-no">1491</span><span id="line-1491">    public int getFamilyOffset() {</span>
+<span class="source-line-no">1492</span><span id="line-1492">      return 0;</span>
+<span class="source-line-no">1493</span><span id="line-1493">    }</span>
+<span class="source-line-no">1494</span><span id="line-1494"></span>
+<span class="source-line-no">1495</span><span id="line-1495">    @Override</span>
+<span class="source-line-no">1496</span><span id="line-1496">    public byte getFamilyLength() {</span>
+<span class="source-line-no">1497</span><span id="line-1497">      return 0;</span>
+<span class="source-line-no">1498</span><span id="line-1498">    }</span>
+<span class="source-line-no">1499</span><span id="line-1499"></span>
+<span class="source-line-no">1500</span><span id="line-1500">    @Override</span>
+<span class="source-line-no">1501</span><span id="line-1501">    public byte[] getQualifierArray() {</span>
+<span class="source-line-no">1502</span><span id="line-1502">      return CellUtil.cloneQualifier(this);</span>
+<span class="source-line-no">1503</span><span id="line-1503">    }</span>
+<span class="source-line-no">1504</span><span id="line-1504"></span>
+<span class="source-line-no">1505</span><span id="line-1505">    @Override</span>
+<span class="source-line-no">1506</span><span id="line-1506">    public int getQualifierOffset() {</span>
+<span class="source-line-no">1507</span><span id="line-1507">      return 0;</span>
+<span class="source-line-no">1508</span><span id="line-1508">    }</span>
+<span class="source-line-no">1509</span><span id="line-1509"></span>
+<span class="source-line-no">1510</span><span id="line-1510">    @Override</span>
+<span class="source-line-no">1511</span><span id="line-1511">    public int getQualifierLength() {</span>
+<span class="source-line-no">1512</span><span id="line-1512">      return 0;</span>
+<span class="source-line-no">1513</span><span id="line-1513">    }</span>
+<span class="source-line-no">1514</span><span id="line-1514"></span>
+<span class="source-line-no">1515</span><span id="line-1515">    @Override</span>
+<span class="source-line-no">1516</span><span id="line-1516">    public long getSequenceId() {</span>
+<span class="source-line-no">1517</span><span id="line-1517">      return 0;</span>
+<span class="source-line-no">1518</span><span id="line-1518">    }</span>
+<span class="source-line-no">1519</span><span id="line-1519"></span>
+<span class="source-line-no">1520</span><span id="line-1520">    @Override</span>
+<span class="source-line-no">1521</span><span id="line-1521">    public byte[] getValueArray() {</span>
+<span class="source-line-no">1522</span><span id="line-1522">      return CellUtil.cloneValue(this);</span>
+<span class="source-line-no">1523</span><span id="line-1523">    }</span>
+<span class="source-line-no">1524</span><span id="line-1524"></span>
+<span class="source-line-no">1525</span><span id="line-1525">    @Override</span>
+<span class="source-line-no">1526</span><span id="line-1526">    public int getValueOffset() {</span>
+<span class="source-line-no">1527</span><span id="line-1527">      return 0;</span>
+<span class="source-line-no">1528</span><span id="line-1528">    }</span>
+<span class="source-line-no">1529</span><span id="line-1529"></span>
+<span class="source-line-no">1530</span><span id="line-1530">    @Override</span>
+<span class="source-line-no">1531</span><span id="line-1531">    public int getValueLength() {</span>
+<span class="source-line-no">1532</span><span id="line-1532">      return 0;</span>
+<span class="source-line-no">1533</span><span id="line-1533">    }</span>
+<span class="source-line-no">1534</span><span id="line-1534"></span>
+<span class="source-line-no">1535</span><span id="line-1535">    @Override</span>
+<span class="source-line-no">1536</span><span id="line-1536">    public byte[] getTagsArray() {</span>
+<span class="source-line-no">1537</span><span id="line-1537">      return PrivateCellUtil.cloneTags(this);</span>
+<span class="source-line-no">1538</span><span id="line-1538">    }</span>
+<span class="source-line-no">1539</span><span id="line-1539"></span>
+<span class="source-line-no">1540</span><span id="line-1540">    @Override</span>
+<span class="source-line-no">1541</span><span id="line-1541">    public int getTagsOffset() {</span>
+<span class="source-line-no">1542</span><span id="line-1542">      return 0;</span>
+<span class="source-line-no">1543</span><span id="line-1543">    }</span>
+<span class="source-line-no">1544</span><span id="line-1544"></span>
+<span class="source-line-no">1545</span><span id="line-1545">    @Override</span>
+<span class="source-line-no">1546</span><span id="line-1546">    public int getTagsLength() {</span>
+<span class="source-line-no">1547</span><span id="line-1547">      return 0;</span>
+<span class="source-line-no">1548</span><span id="line-1548">    }</span>
+<span class="source-line-no">1549</span><span id="line-1549"></span>
+<span class="source-line-no">1550</span><span id="line-1550">    @Override</span>
+<span class="source-line-no">1551</span><span id="line-1551">    public ByteBuffer getRowByteBuffer() {</span>
+<span class="source-line-no">1552</span><span id="line-1552">      return HConstants.EMPTY_BYTE_BUFFER;</span>
+<span class="source-line-no">1553</span><span id="line-1553">    }</span>
+<span class="source-line-no">1554</span><span id="line-1554"></span>
+<span class="source-line-no">1555</span><span id="line-1555">    @Override</span>
+<span class="source-line-no">1556</span><span id="line-1556">    public int getRowPosition() {</span>
+<span class="source-line-no">1557</span><span id="line-1557">      return 0;</span>
+<span class="source-line-no">1558</span><span id="line-1558">    }</span>
+<span class="source-line-no">1559</span><span id="line-1559"></span>
+<span class="source-line-no">1560</span><span id="line-1560">    @Override</span>
+<span class="source-line-no">1561</span><span id="line-1561">    public ByteBuffer getFamilyByteBuffer() {</span>
+<span class="source-line-no">1562</span><span id="line-1562">      return HConstants.EMPTY_BYTE_BUFFER;</span>
+<span class="source-line-no">1563</span><span id="line-1563">    }</span>
+<span class="source-line-no">1564</span><span id="line-1564"></span>
+<span class="source-line-no">1565</span><span id="line-1565">    @Override</span>
+<span class="source-line-no">1566</span><span id="line-1566">    public int getFamilyPosition() {</span>
+<span class="source-line-no">1567</span><span id="line-1567">      return 0;</span>
+<span class="source-line-no">1568</span><span id="line-1568">    }</span>
+<span class="source-line-no">1569</span><span id="line-1569"></span>
+<span class="source-line-no">1570</span><span id="line-1570">    @Override</span>
+<span class="source-line-no">1571</span><span id="line-1571">    public ByteBuffer getQualifierByteBuffer() {</span>
+<span class="source-line-no">1572</span><span id="line-1572">      return HConstants.EMPTY_BYTE_BUFFER;</span>
+<span class="source-line-no">1573</span><span id="line-1573">    }</span>
+<span class="source-line-no">1574</span><span id="line-1574"></span>
+<span class="source-line-no">1575</span><span id="line-1575">    @Override</span>
+<span class="source-line-no">1576</span><span id="line-1576">    public int getQualifierPosition() {</span>
+<span class="source-line-no">1577</span><span id="line-1577">      return 0;</span>
+<span class="source-line-no">1578</span><span id="line-1578">    }</span>
+<span class="source-line-no">1579</span><span id="line-1579"></span>
+<span class="source-line-no">1580</span><span id="line-1580">    @Override</span>
+<span class="source-line-no">1581</span><span id="line-1581">    public ByteBuffer getTagsByteBuffer() {</span>
+<span class="source-line-no">1582</span><span id="line-1582">      return HConstants.EMPTY_BYTE_BUFFER;</span>
+<span class="source-line-no">1583</span><span id="line-1583">    }</span>
+<span class="source-line-no">1584</span><span id="line-1584"></span>
+<span class="source-line-no">1585</span><span id="line-1585">    @Override</span>
+<span class="source-line-no">1586</span><span id="line-1586">    public int getTagsPosition() {</span>
+<span class="source-line-no">1587</span><span id="line-1587">      return 0;</span>
+<span class="source-line-no">1588</span><span id="line-1588">    }</span>
+<span class="source-line-no">1589</span><span id="line-1589"></span>
+<span class="source-line-no">1590</span><span id="line-1590">    @Override</span>
+<span class="source-line-no">1591</span><span id="line-1591">    public ByteBuffer getValueByteBuffer() {</span>
+<span class="source-line-no">1592</span><span id="line-1592">      return HConstants.EMPTY_BYTE_BUFFER;</span>
+<span class="source-line-no">1593</span><span id="line-1593">    }</span>
+<span class="source-line-no">1594</span><span id="line-1594"></span>
+<span class="source-line-no">1595</span><span id="line-1595">    @Override</span>
+<span class="source-line-no">1596</span><span id="line-1596">    public int getValuePosition() {</span>
+<span class="source-line-no">1597</span><span id="line-1597">      return 0;</span>
+<span class="source-line-no">1598</span><span id="line-1598">    }</span>
+<span class="source-line-no">1599</span><span id="line-1599">  }</span>
+<span class="source-line-no">1600</span><span id="line-1600"></span>
+<span class="source-line-no">1601</span><span id="line-1601">  private static class FirstOnRowCell extends EmptyCell {</span>
+<span class="source-line-no">1602</span><span id="line-1602">    // @formatter:off</span>
+<span class="source-line-no">1603</span><span id="line-1603">    private static final int FIXED_HEAPSIZE =</span>
+<span class="source-line-no">1604</span><span id="line-1604">        ClassSize.OBJECT // object</span>
+<span class="source-line-no">1605</span><span id="line-1605">      + ClassSize.REFERENCE // row array</span>
+<span class="source-line-no">1606</span><span id="line-1606">      + Bytes.SIZEOF_INT // row offset</span>
+<span class="source-line-no">1607</span><span id="line-1607">      + Bytes.SIZEOF_SHORT;  // row length</span>
+<span class="source-line-no">1608</span><span id="line-1608">    // @formatter:on</span>
+<span class="source-line-no">1609</span><span id="line-1609">    private final byte[] rowArray;</span>
+<span class="source-line-no">1610</span><span id="line-1610">    private final int roffset;</span>
+<span class="source-line-no">1611</span><span id="line-1611">    private final short rlength;</span>
+<span class="source-line-no">1612</span><span id="line-1612"></span>
+<span class="source-line-no">1613</span><span id="line-1613">    public FirstOnRowCell(final byte[] row, int roffset, short rlength) {</span>
+<span class="source-line-no">1614</span><span id="line-1614">      this.rowArray = row;</span>
+<span class="source-line-no">1615</span><span id="line-1615">      this.roffset = roffset;</span>
+<span class="source-line-no">1616</span><span id="line-1616">      this.rlength = rlength;</span>
+<span class="source-line-no">1617</span><span id="line-1617">    }</span>
+<span class="source-line-no">1618</span><span id="line-1618"></span>
+<span class="source-line-no">1619</span><span id="line-1619">    @Override</span>
+<span class="source-line-no">1620</span><span id="line-1620">    public long heapSize() {</span>
+<span class="source-line-no">1621</span><span id="line-1621">      return ClassSize.align(FIXED_HEAPSIZE)</span>
+<span class="source-line-no">1622</span><span id="line-1622">        // array overhead</span>
+<span class="source-line-no">1623</span><span id="line-1623">        + (rlength == 0 ? ClassSize.sizeOfByteArray(rlength) : rlength);</span>
+<span class="source-line-no">1624</span><span id="line-1624">    }</span>
+<span class="source-line-no">1625</span><span id="line-1625"></span>
+<span class="source-line-no">1626</span><span id="line-1626">    @Override</span>
+<span class="source-line-no">1627</span><span id="line-1627">    public byte[] getRowArray() {</span>
+<span class="source-line-no">1628</span><span id="line-1628">      return this.rowArray;</span>
+<span class="source-line-no">1629</span><span id="line-1629">    }</span>
+<span class="source-line-no">1630</span><span id="line-1630"></span>
+<span class="source-line-no">1631</span><span id="line-1631">    @Override</span>
+<span class="source-line-no">1632</span><span id="line-1632">    public int getRowOffset() {</span>
+<span class="source-line-no">1633</span><span id="line-1633">      return this.roffset;</span>
+<span class="source-line-no">1634</span><span id="line-1634">    }</span>
+<span class="source-line-no">1635</span><span id="line-1635"></span>
+<span class="source-line-no">1636</span><span id="line-1636">    @Override</span>
+<span class="source-line-no">1637</span><span id="line-1637">    public short getRowLength() {</span>
+<span class="source-line-no">1638</span><span id="line-1638">      return this.rlength;</span>
+<span class="source-line-no">1639</span><span id="line-1639">    }</span>
+<span class="source-line-no">1640</span><span id="line-1640"></span>
+<span class="source-line-no">1641</span><span id="line-1641">    @Override</span>
+<span class="source-line-no">1642</span><span id="line-1642">    public long getTimestamp() {</span>
+<span class="source-line-no">1643</span><span id="line-1643">      return HConstants.LATEST_TIMESTAMP;</span>
+<span class="source-line-no">1644</span><span id="line-1644">    }</span>
+<span class="source-line-no">1645</span><span id="line-1645"></span>
+<span class="source-line-no">1646</span><span id="line-1646">    @Override</span>
+<span class="source-line-no">1647</span><span id="line-1647">    public byte getTypeByte() {</span>
+<span class="source-line-no">1648</span><span id="line-1648">      return KeyValue.Type.Maximum.getCode();</span>
+<span class="source-line-no">1649</span><span id="line-1649">    }</span>
+<span class="source-line-no">1650</span><span id="line-1650"></span>
+<span class="source-line-no">1651</span><span id="line-1651">    @Override</span>
+<span class="source-line-no">1652</span><span id="line-1652">    public Cell.Type getType() {</span>
+<span class="source-line-no">1653</span><span id="line-1653">      throw new UnsupportedOperationException();</span>
+<span class="source-line-no">1654</span><span id="line-1654">    }</span>
+<span class="source-line-no">1655</span><span id="line-1655">  }</span>
+<span class="source-line-no">1656</span><span id="line-1656"></span>
+<span class="source-line-no">1657</span><span id="line-1657">  private static class FirstOnRowByteBufferExtendedCell extends EmptyByteBufferExtendedCell {</span>
+<span class="source-line-no">1658</span><span id="line-1658">    // @formatter:off</span>
+<span class="source-line-no">1659</span><span id="line-1659">    private static final int FIXED_OVERHEAD =</span>
+<span class="source-line-no">1660</span><span id="line-1660">        ClassSize.OBJECT // object</span>
+<span class="source-line-no">1661</span><span id="line-1661">        + ClassSize.REFERENCE // row buffer</span>
+<span class="source-line-no">1662</span><span id="line-1662">        + Bytes.SIZEOF_INT // row offset</span>
+<span class="source-line-no">1663</span><span id="line-1663">        + Bytes.SIZEOF_SHORT; // row length</span>
+<span class="source-line-no">1664</span><span id="line-1664">    // @formatter:on</span>
+<span class="source-line-no">1665</span><span id="line-1665">    private final ByteBuffer rowBuff;</span>
+<span class="source-line-no">1666</span><span id="line-1666">    private final int roffset;</span>
+<span class="source-line-no">1667</span><span id="line-1667">    private final short rlength;</span>
+<span class="source-line-no">1668</span><span id="line-1668"></span>
+<span class="source-line-no">1669</span><span id="line-1669">    public FirstOnRowByteBufferExtendedCell(final ByteBuffer row, int roffset, short rlength) {</span>
+<span class="source-line-no">1670</span><span id="line-1670">      this.rowBuff = row;</span>
+<span class="source-line-no">1671</span><span id="line-1671">      this.roffset = roffset;</span>
+<span class="source-line-no">1672</span><span id="line-1672">      this.rlength = rlength;</span>
+<span class="source-line-no">1673</span><span id="line-1673">    }</span>
+<span class="source-line-no">1674</span><span id="line-1674"></span>
+<span class="source-line-no">1675</span><span id="line-1675">    @Override</span>
+<span class="source-line-no">1676</span><span id="line-1676">    public long heapSize() {</span>
+<span class="source-line-no">1677</span><span id="line-1677">      if (this.rowBuff.hasArray()) {</span>
+<span class="source-line-no">1678</span><span id="line-1678">        return ClassSize.align(FIXED_OVERHEAD + rlength);</span>
+<span class="source-line-no">1679</span><span id="line-1679">      }</span>
+<span class="source-line-no">1680</span><span id="line-1680">      return ClassSize.align(FIXED_OVERHEAD);</span>
+<span class="source-line-no">1681</span><span id="line-1681">    }</span>
+<span class="source-line-no">1682</span><span id="line-1682"></span>
+<span class="source-line-no">1683</span><span id="line-1683">    @Override</span>
+<span class="source-line-no">1684</span><span id="line-1684">    public ByteBuffer getRowByteBuffer() {</span>
+<span class="source-line-no">1685</span><span id="line-1685">      return this.rowBuff;</span>
+<span class="source-line-no">1686</span><span id="line-1686">    }</span>
+<span class="source-line-no">1687</span><span id="line-1687"></span>
+<span class="source-line-no">1688</span><span id="line-1688">    @Override</span>
+<span class="source-line-no">1689</span><span id="line-1689">    public int getRowPosition() {</span>
+<span class="source-line-no">1690</span><span id="line-1690">      return this.roffset;</span>
+<span class="source-line-no">1691</span><span id="line-1691">    }</span>
+<span class="source-line-no">1692</span><span id="line-1692"></span>
+<span class="source-line-no">1693</span><span id="line-1693">    @Override</span>
+<span class="source-line-no">1694</span><span id="line-1694">    public short getRowLength() {</span>
+<span class="source-line-no">1695</span><span id="line-1695">      return this.rlength;</span>
+<span class="source-line-no">1696</span><span id="line-1696">    }</span>
+<span class="source-line-no">1697</span><span id="line-1697"></span>
+<span class="source-line-no">1698</span><span id="line-1698">    @Override</span>
+<span class="source-line-no">1699</span><span id="line-1699">    public long getTimestamp() {</span>
+<span class="source-line-no">1700</span><span id="line-1700">      return HConstants.LATEST_TIMESTAMP;</span>
+<span class="source-line-no">1701</span><span id="line-1701">    }</span>
+<span class="source-line-no">1702</span><span id="line-1702"></span>
+<span class="source-line-no">1703</span><span id="line-1703">    @Override</span>
+<span class="source-line-no">1704</span><span id="line-1704">    public byte getTypeByte() {</span>
+<span class="source-line-no">1705</span><span id="line-1705">      return KeyValue.Type.Maximum.getCode();</span>
+<span class="source-line-no">1706</span><span id="line-1706">    }</span>
+<span class="source-line-no">1707</span><span id="line-1707"></span>
+<span class="source-line-no">1708</span><span id="line-1708">    @Override</span>
+<span class="source-line-no">1709</span><span id="line-1709">    public Type getType() {</span>
+<span class="source-line-no">1710</span><span id="line-1710">      throw new UnsupportedOperationException();</span>
+<span class="source-line-no">1711</span><span id="line-1711">    }</span>
+<span class="source-line-no">1712</span><span id="line-1712">  }</span>
+<span class="source-line-no">1713</span><span id="line-1713"></span>
+<span class="source-line-no">1714</span><span id="line-1714">  private static class LastOnRowByteBufferExtendedCell extends EmptyByteBufferExtendedCell {</span>
+<span class="source-line-no">1715</span><span id="line-1715">    // @formatter:off</span>
+<span class="source-line-no">1716</span><span id="line-1716">    private static final int FIXED_OVERHEAD = ClassSize.OBJECT // object</span>
+<span class="source-line-no">1717</span><span id="line-1717">      + ClassSize.REFERENCE // rowBuff</span>
+<span class="source-line-no">1718</span><span id="line-1718">      + Bytes.SIZEOF_INT // roffset</span>
+<span class="source-line-no">1719</span><span id="line-1719">      + Bytes.SIZEOF_SHORT; // rlength</span>
+<span class="source-line-no">1720</span><span id="line-1720">    // @formatter:on</span>
+<span class="source-line-no">1721</span><span id="line-1721">    private final ByteBuffer rowBuff;</span>
+<span class="source-line-no">1722</span><span id="line-1722">    private final int roffset;</span>
+<span class="source-line-no">1723</span><span id="line-1723">    private final short rlength;</span>
+<span class="source-line-no">1724</span><span id="line-1724"></span>
+<span class="source-line-no">1725</span><span id="line-1725">    public LastOnRowByteBufferExtendedCell(final ByteBuffer row, int roffset, short rlength) {</span>
+<span class="source-line-no">1726</span><span id="line-1726">      this.rowBuff = row;</span>
+<span class="source-line-no">1727</span><span id="line-1727">      this.roffset = roffset;</span>
+<span class="source-line-no">1728</span><span id="line-1728">      this.rlength = rlength;</span>
+<span class="source-line-no">1729</span><span id="line-1729">    }</span>
+<span class="source-line-no">1730</span><span id="line-1730"></span>
+<span class="source-line-no">1731</span><span id="line-1731">    @Override</span>
+<span class="source-line-no">1732</span><span id="line-1732">    public long heapSize() {</span>
+<span class="source-line-no">1733</span><span id="line-1733">      if (this.rowBuff.hasArray()) {</span>
+<span class="source-line-no">1734</span><span id="line-1734">        return ClassSize.align(FIXED_OVERHEAD + rlength);</span>
+<span class="source-line-no">1735</span><span id="line-1735">      }</span>
+<span class="source-line-no">1736</span><span id="line-1736">      return ClassSize.align(FIXED_OVERHEAD);</span>
+<span class="source-line-no">1737</span><span id="line-1737">    }</span>
+<span class="source-line-no">1738</span><span id="line-1738"></span>
+<span class="source-line-no">1739</span><span id="line-1739">    @Override</span>
+<span class="source-line-no">1740</span><span id="line-1740">    public ByteBuffer getRowByteBuffer() {</span>
+<span class="source-line-no">1741</span><span id="line-1741">      return this.rowBuff;</span>
+<span class="source-line-no">1742</span><span id="line-1742">    }</span>
+<span class="source-line-no">1743</span><span id="line-1743"></span>
+<span class="source-line-no">1744</span><span id="line-1744">    @Override</span>
+<span class="source-line-no">1745</span><span id="line-1745">    public int getRowPosition() {</span>
+<span class="source-line-no">1746</span><span id="line-1746">      return this.roffset;</span>
+<span class="source-line-no">1747</span><span id="line-1747">    }</span>
+<span class="source-line-no">1748</span><span id="line-1748"></span>
+<span class="source-line-no">1749</span><span id="line-1749">    @Override</span>
+<span class="source-line-no">1750</span><span id="line-1750">    public short getRowLength() {</span>
+<span class="source-line-no">1751</span><span id="line-1751">      return this.rlength;</span>
+<span class="source-line-no">1752</span><span id="line-1752">    }</span>
+<span class="source-line-no">1753</span><span id="line-1753"></span>
+<span class="source-line-no">1754</span><span id="line-1754">    @Override</span>
+<span class="source-line-no">1755</span><span id="line-1755">    public long getTimestamp() {</span>
+<span class="source-line-no">1756</span><span id="line-1756">      return PrivateConstants.OLDEST_TIMESTAMP;</span>
+<span class="source-line-no">1757</span><span id="line-1757">    }</span>
+<span class="source-line-no">1758</span><span id="line-1758"></span>
+<span class="source-line-no">1759</span><span id="line-1759">    @Override</span>
+<span class="source-line-no">1760</span><span id="line-1760">    public byte getTypeByte() {</span>
+<span class="source-line-no">1761</span><span id="line-1761">      return KeyValue.Type.Minimum.getCode();</span>
+<span class="source-line-no">1762</span><span id="line-1762">    }</span>
+<span class="source-line-no">1763</span><span id="line-1763"></span>
+<span class="source-line-no">1764</span><span id="line-1764">    @Override</span>
+<span class="source-line-no">1765</span><span id="line-1765">    public Type getType() {</span>
+<span class="source-line-no">1766</span><span id="line-1766">      throw new UnsupportedOperationException();</span>
+<span class="source-line-no">1767</span><span id="line-1767">    }</span>
+<span class="source-line-no">1768</span><span id="line-1768">  }</span>
+<span class="source-line-no">1769</span><span id="line-1769"></span>
+<span class="source-line-no">1770</span><span id="line-1770">  private static class FirstOnRowColByteBufferExtendedCell</span>
+<span class="source-line-no">1771</span><span id="line-1771">    extends FirstOnRowByteBufferExtendedCell {</span>
+<span class="source-line-no">1772</span><span id="line-1772">    // @formatter:off</span>
+<span class="source-line-no">1773</span><span id="line-1773">    private static final int FIXED_OVERHEAD = FirstOnRowByteBufferExtendedCell.FIXED_OVERHEAD</span>
+<span class="source-line-no">1774</span><span id="line-1774">      + ClassSize.REFERENCE * 2 // family buffer and column buffer</span>
+<span class="source-line-no">1775</span><span id="line-1775">      + Bytes.SIZEOF_INT * 3 // famOffset, colOffset, colLength</span>
+<span class="source-line-no">1776</span><span id="line-1776">      + Bytes.SIZEOF_BYTE; // famLength</span>
+<span class="source-line-no">1777</span><span id="line-1777">    // @formatter:on</span>
+<span class="source-line-no">1778</span><span id="line-1778">    private final ByteBuffer famBuff;</span>
+<span class="source-line-no">1779</span><span id="line-1779">    private final int famOffset;</span>
+<span class="source-line-no">1780</span><span id="line-1780">    private final byte famLength;</span>
+<span class="source-line-no">1781</span><span id="line-1781">    private final ByteBuffer colBuff;</span>
+<span class="source-line-no">1782</span><span id="line-1782">    private final int colOffset;</span>
+<span class="source-line-no">1783</span><span id="line-1783">    private final int colLength;</span>
+<span class="source-line-no">1784</span><span id="line-1784"></span>
+<span class="source-line-no">1785</span><span id="line-1785">    public FirstOnRowColByteBufferExtendedCell(final ByteBuffer row, int roffset, short rlength,</span>
+<span class="source-line-no">1786</span><span id="line-1786">      final ByteBuffer famBuff, final int famOffset, final byte famLength, final ByteBuffer col,</span>
+<span class="source-line-no">1787</span><span id="line-1787">      final int colOffset, final int colLength) {</span>
+<span class="source-line-no">1788</span><span id="line-1788">      super(row, roffset, rlength);</span>
+<span class="source-line-no">1789</span><span id="line-1789">      this.famBuff = famBuff;</span>
+<span class="source-line-no">1790</span><span id="line-1790">      this.famOffset = famOffset;</span>
+<span class="source-line-no">1791</span><span id="line-1791">      this.famLength = famLength;</span>
+<span class="source-line-no">1792</span><span id="line-1792">      this.colBuff = col;</span>
+<span class="source-line-no">1793</span><span id="line-1793">      this.colOffset = colOffset;</span>
+<span class="source-line-no">1794</span><span id="line-1794">      this.colLength = colLength;</span>
+<span class="source-line-no">1795</span><span id="line-1795">    }</span>
+<span class="source-line-no">1796</span><span id="line-1796"></span>
+<span class="source-line-no">1797</span><span id="line-1797">    @Override</span>
+<span class="source-line-no">1798</span><span id="line-1798">    public long heapSize() {</span>
+<span class="source-line-no">1799</span><span id="line-1799">      if (famBuff.hasArray() &amp;&amp; colBuff.hasArray()) {</span>
+<span class="source-line-no">1800</span><span id="line-1800">        return ClassSize.align(FIXED_OVERHEAD + famLength + colLength);</span>
+<span class="source-line-no">1801</span><span id="line-1801">      } else if (famBuff.hasArray()) {</span>
+<span class="source-line-no">1802</span><span id="line-1802">        return ClassSize.align(FIXED_OVERHEAD + famLength);</span>
+<span class="source-line-no">1803</span><span id="line-1803">      } else if (colBuff.hasArray()) {</span>
+<span class="source-line-no">1804</span><span id="line-1804">        return ClassSize.align(FIXED_OVERHEAD + colLength);</span>
+<span class="source-line-no">1805</span><span id="line-1805">      } else {</span>
+<span class="source-line-no">1806</span><span id="line-1806">        return ClassSize.align(FIXED_OVERHEAD);</span>
+<span class="source-line-no">1807</span><span id="line-1807">      }</span>
+<span class="source-line-no">1808</span><span id="line-1808">    }</span>
+<span class="source-line-no">1809</span><span id="line-1809"></span>
+<span class="source-line-no">1810</span><span id="line-1810">    @Override</span>
+<span class="source-line-no">1811</span><span id="line-1811">    public ByteBuffer getFamilyByteBuffer() {</span>
+<span class="source-line-no">1812</span><span id="line-1812">      return this.famBuff;</span>
+<span class="source-line-no">1813</span><span id="line-1813">    }</span>
+<span class="source-line-no">1814</span><span id="line-1814"></span>
+<span class="source-line-no">1815</span><span id="line-1815">    @Override</span>
+<span class="source-line-no">1816</span><span id="line-1816">    public int getFamilyPosition() {</span>
+<span class="source-line-no">1817</span><span id="line-1817">      return this.famOffset;</span>
+<span class="source-line-no">1818</span><span id="line-1818">    }</span>
+<span class="source-line-no">1819</span><span id="line-1819"></span>
+<span class="source-line-no">1820</span><span id="line-1820">    @Override</span>
+<span class="source-line-no">1821</span><span id="line-1821">    public byte getFamilyLength() {</span>
+<span class="source-line-no">1822</span><span id="line-1822">      return famLength;</span>
+<span class="source-line-no">1823</span><span id="line-1823">    }</span>
+<span class="source-line-no">1824</span><span id="line-1824"></span>
+<span class="source-line-no">1825</span><span id="line-1825">    @Override</span>
+<span class="source-line-no">1826</span><span id="line-1826">    public ByteBuffer getQualifierByteBuffer() {</span>
+<span class="source-line-no">1827</span><span id="line-1827">      return this.colBuff;</span>
+<span class="source-line-no">1828</span><span id="line-1828">    }</span>
+<span class="source-line-no">1829</span><span id="line-1829"></span>
+<span class="source-line-no">1830</span><span id="line-1830">    @Override</span>
+<span class="source-line-no">1831</span><span id="line-1831">    public int getQualifierPosition() {</span>
+<span class="source-line-no">1832</span><span id="line-1832">      return this.colOffset;</span>
+<span class="source-line-no">1833</span><span id="line-1833">    }</span>
+<span class="source-line-no">1834</span><span id="line-1834"></span>
+<span class="source-line-no">1835</span><span id="line-1835">    @Override</span>
+<span class="source-line-no">1836</span><span id="line-1836">    public int getQualifierLength() {</span>
+<span class="source-line-no">1837</span><span id="line-1837">      return this.colLength;</span>
+<span class="source-line-no">1838</span><span id="line-1838">    }</span>
+<span class="source-line-no">1839</span><span id="line-1839">  }</span>
+<span class="source-line-no">1840</span><span id="line-1840"></span>
+<span class="source-line-no">1841</span><span id="line-1841">  private static class FirstOnRowColCell extends FirstOnRowCell {</span>
+<span class="source-line-no">1842</span><span id="line-1842">    // @formatter:off</span>
+<span class="source-line-no">1843</span><span id="line-1843">    private static final long FIXED_HEAPSIZE = (long) FirstOnRowCell.FIXED_HEAPSIZE</span>
+<span class="source-line-no">1844</span><span id="line-1844">      + Bytes.SIZEOF_BYTE // flength</span>
+<span class="source-line-no">1845</span><span id="line-1845">      + Bytes.SIZEOF_INT * 3 // foffset, qoffset, qlength</span>
+<span class="source-line-no">1846</span><span id="line-1846">      + ClassSize.REFERENCE * 2; // fArray, qArray</span>
+<span class="source-line-no">1847</span><span id="line-1847">    // @formatter:on</span>
+<span class="source-line-no">1848</span><span id="line-1848">    private final byte[] fArray;</span>
+<span class="source-line-no">1849</span><span id="line-1849">    private final int foffset;</span>
+<span class="source-line-no">1850</span><span id="line-1850">    private final byte flength;</span>
+<span class="source-line-no">1851</span><span id="line-1851">    private final byte[] qArray;</span>
+<span class="source-line-no">1852</span><span id="line-1852">    private final int qoffset;</span>
+<span class="source-line-no">1853</span><span id="line-1853">    private final int qlength;</span>
+<span class="source-line-no">1854</span><span id="line-1854"></span>
+<span class="source-line-no">1855</span><span id="line-1855">    public FirstOnRowColCell(byte[] rArray, int roffset, short rlength, byte[] fArray, int foffset,</span>
+<span class="source-line-no">1856</span><span id="line-1856">      byte flength, byte[] qArray, int qoffset, int qlength) {</span>
+<span class="source-line-no">1857</span><span id="line-1857">      super(rArray, roffset, rlength);</span>
+<span class="source-line-no">1858</span><span id="line-1858">      this.fArray = fArray;</span>
+<span class="source-line-no">1859</span><span id="line-1859">      this.foffset = foffset;</span>
+<span class="source-line-no">1860</span><span id="line-1860">      this.flength = flength;</span>
+<span class="source-line-no">1861</span><span id="line-1861">      this.qArray = qArray;</span>
+<span class="source-line-no">1862</span><span id="line-1862">      this.qoffset = qoffset;</span>
+<span class="source-line-no">1863</span><span id="line-1863">      this.qlength = qlength;</span>
+<span class="source-line-no">1864</span><span id="line-1864">    }</span>
+<span class="source-line-no">1865</span><span id="line-1865"></span>
+<span class="source-line-no">1866</span><span id="line-1866">    @Override</span>
+<span class="source-line-no">1867</span><span id="line-1867">    public long heapSize() {</span>
+<span class="source-line-no">1868</span><span id="line-1868">      return ClassSize.align(FIXED_HEAPSIZE)</span>
+<span class="source-line-no">1869</span><span id="line-1869">        // array overhead</span>
+<span class="source-line-no">1870</span><span id="line-1870">        + (flength == 0 ? ClassSize.sizeOfByteArray(flength) : flength)</span>
+<span class="source-line-no">1871</span><span id="line-1871">        + (qlength == 0 ? ClassSize.sizeOfByteArray(qlength) : qlength);</span>
+<span class="source-line-no">1872</span><span id="line-1872">    }</span>
+<span class="source-line-no">1873</span><span id="line-1873"></span>
+<span class="source-line-no">1874</span><span id="line-1874">    @Override</span>
+<span class="source-line-no">1875</span><span id="line-1875">    public byte[] getFamilyArray() {</span>
+<span class="source-line-no">1876</span><span id="line-1876">      return this.fArray;</span>
+<span class="source-line-no">1877</span><span id="line-1877">    }</span>
+<span class="source-line-no">1878</span><span id="line-1878"></span>
+<span class="source-line-no">1879</span><span id="line-1879">    @Override</span>
+<span class="source-line-no">1880</span><span id="line-1880">    public int getFamilyOffset() {</span>
+<span class="source-line-no">1881</span><span id="line-1881">      return this.foffset;</span>
+<span class="source-line-no">1882</span><span id="line-1882">    }</span>
+<span class="source-line-no">1883</span><span id="line-1883"></span>
+<span class="source-line-no">1884</span><span id="line-1884">    @Override</span>
+<span class="source-line-no">1885</span><span id="line-1885">    public byte getFamilyLength() {</span>
+<span class="source-line-no">1886</span><span id="line-1886">      return this.flength;</span>
+<span class="source-line-no">1887</span><span id="line-1887">    }</span>
+<span class="source-line-no">1888</span><span id="line-1888"></span>
+<span class="source-line-no">1889</span><span id="line-1889">    @Override</span>
+<span class="source-line-no">1890</span><span id="line-1890">    public byte[] getQualifierArray() {</span>
+<span class="source-line-no">1891</span><span id="line-1891">      return this.qArray;</span>
+<span class="source-line-no">1892</span><span id="line-1892">    }</span>
+<span class="source-line-no">1893</span><span id="line-1893"></span>
+<span class="source-line-no">1894</span><span id="line-1894">    @Override</span>
+<span class="source-line-no">1895</span><span id="line-1895">    public int getQualifierOffset() {</span>
+<span class="source-line-no">1896</span><span id="line-1896">      return this.qoffset;</span>
+<span class="source-line-no">1897</span><span id="line-1897">    }</span>
+<span class="source-line-no">1898</span><span id="line-1898"></span>
+<span class="source-line-no">1899</span><span id="line-1899">    @Override</span>
+<span class="source-line-no">1900</span><span id="line-1900">    public int getQualifierLength() {</span>
+<span class="source-line-no">1901</span><span id="line-1901">      return this.qlength;</span>
+<span class="source-line-no">1902</span><span id="line-1902">    }</span>
+<span class="source-line-no">1903</span><span id="line-1903">  }</span>
+<span class="source-line-no">1904</span><span id="line-1904"></span>
+<span class="source-line-no">1905</span><span id="line-1905">  private static class FirstOnRowColTSCell extends FirstOnRowColCell {</span>
+<span class="source-line-no">1906</span><span id="line-1906">    // @formatter:off</span>
+<span class="source-line-no">1907</span><span id="line-1907">    private static final long FIXED_HEAPSIZE = FirstOnRowColCell.FIXED_HEAPSIZE</span>
+<span class="source-line-no">1908</span><span id="line-1908">      + Bytes.SIZEOF_LONG; // ts</span>
+<span class="source-line-no">1909</span><span id="line-1909">    private long ts;</span>
+<span class="source-line-no">1910</span><span id="line-1910">    // @formatter:on</span>
+<span class="source-line-no">1911</span><span id="line-1911"></span>
+<span class="source-line-no">1912</span><span id="line-1912">    public FirstOnRowColTSCell(byte[] rArray, int roffset, short rlength, byte[] fArray,</span>
+<span class="source-line-no">1913</span><span id="line-1913">      int foffset, byte flength, byte[] qArray, int qoffset, int qlength, long ts) {</span>
+<span class="source-line-no">1914</span><span id="line-1914">      super(rArray, roffset, rlength, fArray, foffset, flength, qArray, qoffset, qlength);</span>
+<span class="source-line-no">1915</span><span id="line-1915">      this.ts = ts;</span>
+<span class="source-line-no">1916</span><span id="line-1916">    }</span>
+<span class="source-line-no">1917</span><span id="line-1917"></span>
+<span class="source-line-no">1918</span><span id="line-1918">    @Override</span>
+<span class="source-line-no">1919</span><span id="line-1919">    public long getTimestamp() {</span>
+<span class="source-line-no">1920</span><span id="line-1920">      return this.ts;</span>
+<span class="source-line-no">1921</span><span id="line-1921">    }</span>
+<span class="source-line-no">1922</span><span id="line-1922"></span>
+<span class="source-line-no">1923</span><span id="line-1923">    @Override</span>
+<span class="source-line-no">1924</span><span id="line-1924">    public long heapSize() {</span>
+<span class="source-line-no">1925</span><span id="line-1925">      return ClassSize.align(FIXED_HEAPSIZE);</span>
+<span class="source-line-no">1926</span><span id="line-1926">    }</span>
+<span class="source-line-no">1927</span><span id="line-1927">  }</span>
+<span class="source-line-no">1928</span><span id="line-1928"></span>
+<span class="source-line-no">1929</span><span id="line-1929">  private static class FirstOnRowColTSByteBufferExtendedCell</span>
+<span class="source-line-no">1930</span><span id="line-1930">    extends FirstOnRowColByteBufferExtendedCell {</span>
+<span class="source-line-no">1931</span><span id="line-1931">    // @formatter:off</span>
+<span class="source-line-no">1932</span><span id="line-1932">    private static final int FIXED_OVERHEAD = FirstOnRowColByteBufferExtendedCell.FIXED_OVERHEAD</span>
+<span class="source-line-no">1933</span><span id="line-1933">      + Bytes.SIZEOF_LONG; // ts</span>
+<span class="source-line-no">1934</span><span id="line-1934">    private long ts;</span>
+<span class="source-line-no">1935</span><span id="line-1935">    // @formatter:on</span>
+<span class="source-line-no">1936</span><span id="line-1936"></span>
+<span class="source-line-no">1937</span><span id="line-1937">    public FirstOnRowColTSByteBufferExtendedCell(ByteBuffer rBuffer, int roffset, short rlength,</span>
+<span class="source-line-no">1938</span><span id="line-1938">      ByteBuffer fBuffer, int foffset, byte flength, ByteBuffer qBuffer, int qoffset, int qlength,</span>
+<span class="source-line-no">1939</span><span id="line-1939">      long ts) {</span>
+<span class="source-line-no">1940</span><span id="line-1940">      super(rBuffer, roffset, rlength, fBuffer, foffset, flength, qBuffer, qoffset, qlength);</span>
+<span class="source-line-no">1941</span><span id="line-1941">      this.ts = ts;</span>
+<span class="source-line-no">1942</span><span id="line-1942">    }</span>
+<span class="source-line-no">1943</span><span id="line-1943"></span>
+<span class="source-line-no">1944</span><span id="line-1944">    @Override</span>
+<span class="source-line-no">1945</span><span id="line-1945">    public long getTimestamp() {</span>
+<span class="source-line-no">1946</span><span id="line-1946">      return this.ts;</span>
+<span class="source-line-no">1947</span><span id="line-1947">    }</span>
+<span class="source-line-no">1948</span><span id="line-1948"></span>
+<span class="source-line-no">1949</span><span id="line-1949">    @Override</span>
+<span class="source-line-no">1950</span><span id="line-1950">    public long heapSize() {</span>
+<span class="source-line-no">1951</span><span id="line-1951">      return ClassSize.align(FIXED_OVERHEAD + super.heapSize());</span>
+<span class="source-line-no">1952</span><span id="line-1952">    }</span>
+<span class="source-line-no">1953</span><span id="line-1953">  }</span>
+<span class="source-line-no">1954</span><span id="line-1954"></span>
+<span class="source-line-no">1955</span><span id="line-1955">  private static class LastOnRowCell extends EmptyCell {</span>
+<span class="source-line-no">1956</span><span id="line-1956">    // @formatter:off</span>
+<span class="source-line-no">1957</span><span id="line-1957">    private static final int FIXED_OVERHEAD = ClassSize.OBJECT // object</span>
+<span class="source-line-no">1958</span><span id="line-1958">      + ClassSize.REFERENCE // row array</span>
+<span class="source-line-no">1959</span><span id="line-1959">      + Bytes.SIZEOF_INT // row offset</span>
+<span class="source-line-no">1960</span><span id="line-1960">      + Bytes.SIZEOF_SHORT; // row length</span>
+<span class="source-line-no">1961</span><span id="line-1961">    // @formatter:on</span>
+<span class="source-line-no">1962</span><span id="line-1962">    private final byte[] rowArray;</span>
+<span class="source-line-no">1963</span><span id="line-1963">    private final int roffset;</span>
+<span class="source-line-no">1964</span><span id="line-1964">    private final short rlength;</span>
+<span class="source-line-no">1965</span><span id="line-1965"></span>
+<span class="source-line-no">1966</span><span id="line-1966">    public LastOnRowCell(byte[] row, int roffset, short rlength) {</span>
+<span class="source-line-no">1967</span><span id="line-1967">      this.rowArray = row;</span>
+<span class="source-line-no">1968</span><span id="line-1968">      this.roffset = roffset;</span>
+<span class="source-line-no">1969</span><span id="line-1969">      this.rlength = rlength;</span>
+<span class="source-line-no">1970</span><span id="line-1970">    }</span>
+<span class="source-line-no">1971</span><span id="line-1971"></span>
+<span class="source-line-no">1972</span><span id="line-1972">    @Override</span>
+<span class="source-line-no">1973</span><span id="line-1973">    public long heapSize() {</span>
+<span class="source-line-no">1974</span><span id="line-1974">      return ClassSize.align(FIXED_OVERHEAD)</span>
+<span class="source-line-no">1975</span><span id="line-1975">        // array overhead</span>
+<span class="source-line-no">1976</span><span id="line-1976">        + (rlength == 0 ? ClassSize.sizeOfByteArray(rlength) : rlength);</span>
+<span class="source-line-no">1977</span><span id="line-1977">    }</span>
+<span class="source-line-no">1978</span><span id="line-1978"></span>
+<span class="source-line-no">1979</span><span id="line-1979">    @Override</span>
+<span class="source-line-no">1980</span><span id="line-1980">    public byte[] getRowArray() {</span>
+<span class="source-line-no">1981</span><span id="line-1981">      return this.rowArray;</span>
+<span class="source-line-no">1982</span><span id="line-1982">    }</span>
+<span class="source-line-no">1983</span><span id="line-1983"></span>
+<span class="source-line-no">1984</span><span id="line-1984">    @Override</span>
+<span class="source-line-no">1985</span><span id="line-1985">    public int getRowOffset() {</span>
+<span class="source-line-no">1986</span><span id="line-1986">      return this.roffset;</span>
+<span class="source-line-no">1987</span><span id="line-1987">    }</span>
+<span class="source-line-no">1988</span><span id="line-1988"></span>
+<span class="source-line-no">1989</span><span id="line-1989">    @Override</span>
+<span class="source-line-no">1990</span><span id="line-1990">    public short getRowLength() {</span>
+<span class="source-line-no">1991</span><span id="line-1991">      return this.rlength;</span>
+<span class="source-line-no">1992</span><span id="line-1992">    }</span>
+<span class="source-line-no">1993</span><span id="line-1993"></span>
+<span class="source-line-no">1994</span><span id="line-1994">    @Override</span>
+<span class="source-line-no">1995</span><span id="line-1995">    public long getTimestamp() {</span>
+<span class="source-line-no">1996</span><span id="line-1996">      return PrivateConstants.OLDEST_TIMESTAMP;</span>
+<span class="source-line-no">1997</span><span id="line-1997">    }</span>
+<span class="source-line-no">1998</span><span id="line-1998"></span>
+<span class="source-line-no">1999</span><span id="line-1999">    @Override</span>
+<span class="source-line-no">2000</span><span id="line-2000">    public byte getTypeByte() {</span>
+<span class="source-line-no">2001</span><span id="line-2001">      return KeyValue.Type.Minimum.getCode();</span>
+<span class="source-line-no">2002</span><span id="line-2002">    }</span>
+<span class="source-line-no">2003</span><span id="line-2003"></span>
+<span class="source-line-no">2004</span><span id="line-2004">    @Override</span>
+<span class="source-line-no">2005</span><span id="line-2005">    public Type getType() {</span>
+<span class="source-line-no">2006</span><span id="line-2006">      throw new UnsupportedOperationException();</span>
+<span class="source-line-no">2007</span><span id="line-2007">    }</span>
+<span class="source-line-no">2008</span><span id="line-2008">  }</span>
+<span class="source-line-no">2009</span><span id="line-2009"></span>
+<span class="source-line-no">2010</span><span id="line-2010">  private static class LastOnRowColCell extends LastOnRowCell {</span>
+<span class="source-line-no">2011</span><span id="line-2011">    // @formatter:off</span>
+<span class="source-line-no">2012</span><span id="line-2012">    private static final long FIXED_OVERHEAD = (long) LastOnRowCell.FIXED_OVERHEAD</span>
+<span class="source-line-no">2013</span><span id="line-2013">      + ClassSize.REFERENCE * 2 // fArray and qArray</span>
+<span class="source-line-no">2014</span><span id="line-2014">      + Bytes.SIZEOF_INT * 3 // foffset, qoffset, qlength</span>
+<span class="source-line-no">2015</span><span id="line-2015">      + Bytes.SIZEOF_BYTE; // flength</span>
+<span class="source-line-no">2016</span><span id="line-2016">    // @formatter:on</span>
+<span class="source-line-no">2017</span><span id="line-2017">    private final byte[] fArray;</span>
+<span class="source-line-no">2018</span><span id="line-2018">    private final int foffset;</span>
+<span class="source-line-no">2019</span><span id="line-2019">    private final byte flength;</span>
+<span class="source-line-no">2020</span><span id="line-2020">    private final byte[] qArray;</span>
+<span class="source-line-no">2021</span><span id="line-2021">    private final int qoffset;</span>
+<span class="source-line-no">2022</span><span id="line-2022">    private final int qlength;</span>
+<span class="source-line-no">2023</span><span id="line-2023"></span>
+<span class="source-line-no">2024</span><span id="line-2024">    public LastOnRowColCell(byte[] rArray, int roffset, short rlength, byte[] fArray, int foffset,</span>
+<span class="source-line-no">2025</span><span id="line-2025">      byte flength, byte[] qArray, int qoffset, int qlength) {</span>
+<span class="source-line-no">2026</span><span id="line-2026">      super(rArray, roffset, rlength);</span>
+<span class="source-line-no">2027</span><span id="line-2027">      this.fArray = fArray;</span>
+<span class="source-line-no">2028</span><span id="line-2028">      this.foffset = foffset;</span>
+<span class="source-line-no">2029</span><span id="line-2029">      this.flength = flength;</span>
+<span class="source-line-no">2030</span><span id="line-2030">      this.qArray = qArray;</span>
+<span class="source-line-no">2031</span><span id="line-2031">      this.qoffset = qoffset;</span>
+<span class="source-line-no">2032</span><span id="line-2032">      this.qlength = qlength;</span>
+<span class="source-line-no">2033</span><span id="line-2033">    }</span>
+<span class="source-line-no">2034</span><span id="line-2034"></span>
+<span class="source-line-no">2035</span><span id="line-2035">    @Override</span>
+<span class="source-line-no">2036</span><span id="line-2036">    public long heapSize() {</span>
+<span class="source-line-no">2037</span><span id="line-2037">      return ClassSize.align(FIXED_OVERHEAD)</span>
+<span class="source-line-no">2038</span><span id="line-2038">        // array overhead</span>
+<span class="source-line-no">2039</span><span id="line-2039">        + (flength == 0 ? ClassSize.sizeOfByteArray(flength) : flength)</span>
+<span class="source-line-no">2040</span><span id="line-2040">        + (qlength == 0 ? ClassSize.sizeOfByteArray(qlength) : qlength);</span>
+<span class="source-line-no">2041</span><span id="line-2041">    }</span>
+<span class="source-line-no">2042</span><span id="line-2042"></span>
+<span class="source-line-no">2043</span><span id="line-2043">    @Override</span>
+<span class="source-line-no">2044</span><span id="line-2044">    public byte[] getFamilyArray() {</span>
+<span class="source-line-no">2045</span><span id="line-2045">      return this.fArray;</span>
+<span class="source-line-no">2046</span><span id="line-2046">    }</span>
+<span class="source-line-no">2047</span><span id="line-2047"></span>
+<span class="source-line-no">2048</span><span id="line-2048">    @Override</span>
+<span class="source-line-no">2049</span><span id="line-2049">    public int getFamilyOffset() {</span>
+<span class="source-line-no">2050</span><span id="line-2050">      return this.foffset;</span>
+<span class="source-line-no">2051</span><span id="line-2051">    }</span>
+<span class="source-line-no">2052</span><span id="line-2052"></span>
+<span class="source-line-no">2053</span><span id="line-2053">    @Override</span>
+<span class="source-line-no">2054</span><span id="line-2054">    public byte getFamilyLength() {</span>
+<span class="source-line-no">2055</span><span id="line-2055">      return this.flength;</span>
+<span class="source-line-no">2056</span><span id="line-2056">    }</span>
+<span class="source-line-no">2057</span><span id="line-2057"></span>
+<span class="source-line-no">2058</span><span id="line-2058">    @Override</span>
+<span class="source-line-no">2059</span><span id="line-2059">    public byte[] getQualifierArray() {</span>
+<span class="source-line-no">2060</span><span id="line-2060">      return this.qArray;</span>
+<span class="source-line-no">2061</span><span id="line-2061">    }</span>
+<span class="source-line-no">2062</span><span id="line-2062"></span>
+<span class="source-line-no">2063</span><span id="line-2063">    @Override</span>
+<span class="source-line-no">2064</span><span id="line-2064">    public int getQualifierOffset() {</span>
+<span class="source-line-no">2065</span><span id="line-2065">      return this.qoffset;</span>
+<span class="source-line-no">2066</span><span id="line-2066">    }</span>
+<span class="source-line-no">2067</span><span id="line-2067"></span>
+<span class="source-line-no">2068</span><span id="line-2068">    @Override</span>
+<span class="source-line-no">2069</span><span id="line-2069">    public int getQualifierLength() {</span>
+<span class="source-line-no">2070</span><span id="line-2070">      return this.qlength;</span>
+<span class="source-line-no">2071</span><span id="line-2071">    }</span>
+<span class="source-line-no">2072</span><span id="line-2072">  }</span>
+<span class="source-line-no">2073</span><span id="line-2073"></span>
+<span class="source-line-no">2074</span><span id="line-2074">  private static class LastOnRowColByteBufferExtendedCell extends LastOnRowByteBufferExtendedCell {</span>
+<span class="source-line-no">2075</span><span id="line-2075">    // @formatter:off</span>
+<span class="source-line-no">2076</span><span id="line-2076">    private static final int FIXED_OVERHEAD = LastOnRowByteBufferExtendedCell.FIXED_OVERHEAD</span>
+<span class="source-line-no">2077</span><span id="line-2077">      + ClassSize.REFERENCE * 2 // fBuffer and qBuffer</span>
+<span class="source-line-no">2078</span><span id="line-2078">      + Bytes.SIZEOF_INT * 3 // foffset, qoffset, qlength</span>
+<span class="source-line-no">2079</span><span id="line-2079">      + Bytes.SIZEOF_BYTE; // flength</span>
+<span class="source-line-no">2080</span><span id="line-2080">    // @formatter:on</span>
+<span class="source-line-no">2081</span><span id="line-2081">    private final ByteBuffer fBuffer;</span>
+<span class="source-line-no">2082</span><span id="line-2082">    private final int foffset;</span>
+<span class="source-line-no">2083</span><span id="line-2083">    private final byte flength;</span>
+<span class="source-line-no">2084</span><span id="line-2084">    private final ByteBuffer qBuffer;</span>
+<span class="source-line-no">2085</span><span id="line-2085">    private final int qoffset;</span>
+<span class="source-line-no">2086</span><span id="line-2086">    private final int qlength;</span>
+<span class="source-line-no">2087</span><span id="line-2087"></span>
+<span class="source-line-no">2088</span><span id="line-2088">    public LastOnRowColByteBufferExtendedCell(ByteBuffer rBuffer, int roffset, short rlength,</span>
+<span class="source-line-no">2089</span><span id="line-2089">      ByteBuffer fBuffer, int foffset, byte flength, ByteBuffer qBuffer, int qoffset, int qlength) {</span>
+<span class="source-line-no">2090</span><span id="line-2090">      super(rBuffer, roffset, rlength);</span>
+<span class="source-line-no">2091</span><span id="line-2091">      this.fBuffer = fBuffer;</span>
+<span class="source-line-no">2092</span><span id="line-2092">      this.foffset = foffset;</span>
+<span class="source-line-no">2093</span><span id="line-2093">      this.flength = flength;</span>
+<span class="source-line-no">2094</span><span id="line-2094">      this.qBuffer = qBuffer;</span>
+<span class="source-line-no">2095</span><span id="line-2095">      this.qoffset = qoffset;</span>
+<span class="source-line-no">2096</span><span id="line-2096">      this.qlength = qlength;</span>
+<span class="source-line-no">2097</span><span id="line-2097">    }</span>
+<span class="source-line-no">2098</span><span id="line-2098"></span>
+<span class="source-line-no">2099</span><span id="line-2099">    @Override</span>
+<span class="source-line-no">2100</span><span id="line-2100">    public long heapSize() {</span>
+<span class="source-line-no">2101</span><span id="line-2101">      if (fBuffer.hasArray() &amp;&amp; qBuffer.hasArray()) {</span>
+<span class="source-line-no">2102</span><span id="line-2102">        return ClassSize.align(FIXED_OVERHEAD + flength + qlength);</span>
+<span class="source-line-no">2103</span><span id="line-2103">      } else if (fBuffer.hasArray()) {</span>
+<span class="source-line-no">2104</span><span id="line-2104">        return ClassSize.align(FIXED_OVERHEAD + flength);</span>
+<span class="source-line-no">2105</span><span id="line-2105">      } else if (qBuffer.hasArray()) {</span>
+<span class="source-line-no">2106</span><span id="line-2106">        return ClassSize.align(FIXED_OVERHEAD + qlength);</span>
+<span class="source-line-no">2107</span><span id="line-2107">      } else {</span>
+<span class="source-line-no">2108</span><span id="line-2108">        return ClassSize.align(FIXED_OVERHEAD);</span>
+<span class="source-line-no">2109</span><span id="line-2109">      }</span>
+<span class="source-line-no">2110</span><span id="line-2110">    }</span>
+<span class="source-line-no">2111</span><span id="line-2111"></span>
+<span class="source-line-no">2112</span><span id="line-2112">    @Override</span>
+<span class="source-line-no">2113</span><span id="line-2113">    public ByteBuffer getFamilyByteBuffer() {</span>
+<span class="source-line-no">2114</span><span id="line-2114">      return this.fBuffer;</span>
+<span class="source-line-no">2115</span><span id="line-2115">    }</span>
+<span class="source-line-no">2116</span><span id="line-2116"></span>
+<span class="source-line-no">2117</span><span id="line-2117">    @Override</span>
+<span class="source-line-no">2118</span><span id="line-2118">    public int getFamilyPosition() {</span>
+<span class="source-line-no">2119</span><span id="line-2119">      return this.foffset;</span>
+<span class="source-line-no">2120</span><span id="line-2120">    }</span>
+<span class="source-line-no">2121</span><span id="line-2121"></span>
+<span class="source-line-no">2122</span><span id="line-2122">    @Override</span>
+<span class="source-line-no">2123</span><span id="line-2123">    public byte getFamilyLength() {</span>
+<span class="source-line-no">2124</span><span id="line-2124">      return this.flength;</span>
+<span class="source-line-no">2125</span><span id="line-2125">    }</span>
+<span class="source-line-no">2126</span><span id="line-2126"></span>
+<span class="source-line-no">2127</span><span id="line-2127">    @Override</span>
+<span class="source-line-no">2128</span><span id="line-2128">    public ByteBuffer getQualifierByteBuffer() {</span>
+<span class="source-line-no">2129</span><span id="line-2129">      return this.qBuffer;</span>
+<span class="source-line-no">2130</span><span id="line-2130">    }</span>
+<span class="source-line-no">2131</span><span id="line-2131"></span>
+<span class="source-line-no">2132</span><span id="line-2132">    @Override</span>
+<span class="source-line-no">2133</span><span id="line-2133">    public int getQualifierPosition() {</span>
+<span class="source-line-no">2134</span><span id="line-2134">      return this.qoffset;</span>
+<span class="source-line-no">2135</span><span id="line-2135">    }</span>
+<span class="source-line-no">2136</span><span id="line-2136"></span>
+<span class="source-line-no">2137</span><span id="line-2137">    @Override</span>
+<span class="source-line-no">2138</span><span id="line-2138">    public int getQualifierLength() {</span>
+<span class="source-line-no">2139</span><span id="line-2139">      return this.qlength;</span>
+<span class="source-line-no">2140</span><span id="line-2140">    }</span>
+<span class="source-line-no">2141</span><span id="line-2141">  }</span>
+<span class="source-line-no">2142</span><span id="line-2142"></span>
+<span class="source-line-no">2143</span><span id="line-2143">  private static class FirstOnRowDeleteFamilyCell extends EmptyCell {</span>
+<span class="source-line-no">2144</span><span id="line-2144">    // @formatter:off</span>
+<span class="source-line-no">2145</span><span id="line-2145">    private static final int FIXED_OVERHEAD = ClassSize.OBJECT // object</span>
+<span class="source-line-no">2146</span><span id="line-2146">      + ClassSize.REFERENCE * 2 // fBuffer and qBuffer</span>
+<span class="source-line-no">2147</span><span id="line-2147">      + Bytes.SIZEOF_INT * 3 // foffset, qoffset, qlength</span>
+<span class="source-line-no">2148</span><span id="line-2148">      + Bytes.SIZEOF_BYTE; // flength</span>
+<span class="source-line-no">2149</span><span id="line-2149">    // @formatter:on</span>
+<span class="source-line-no">2150</span><span id="line-2150">    private final byte[] row;</span>
+<span class="source-line-no">2151</span><span id="line-2151">    private final byte[] fam;</span>
+<span class="source-line-no">2152</span><span id="line-2152"></span>
+<span class="source-line-no">2153</span><span id="line-2153">    public FirstOnRowDeleteFamilyCell(byte[] row, byte[] fam) {</span>
+<span class="source-line-no">2154</span><span id="line-2154">      this.row = row;</span>
+<span class="source-line-no">2155</span><span id="line-2155">      this.fam = fam;</span>
+<span class="source-line-no">2156</span><span id="line-2156">    }</span>
+<span class="source-line-no">2157</span><span id="line-2157"></span>
+<span class="source-line-no">2158</span><span id="line-2158">    @Override</span>
+<span class="source-line-no">2159</span><span id="line-2159">    public long heapSize() {</span>
+<span class="source-line-no">2160</span><span id="line-2160">      return ClassSize.align(FIXED_OVERHEAD)</span>
+<span class="source-line-no">2161</span><span id="line-2161">        // array overhead</span>
+<span class="source-line-no">2162</span><span id="line-2162">        + (getRowLength() == 0 ? ClassSize.sizeOfByteArray(getRowLength()) : getRowLength())</span>
+<span class="source-line-no">2163</span><span id="line-2163">        + (getFamilyLength() == 0</span>
+<span class="source-line-no">2164</span><span id="line-2164">          ? ClassSize.sizeOfByteArray(getFamilyLength())</span>
+<span class="source-line-no">2165</span><span id="line-2165">          : getFamilyLength());</span>
+<span class="source-line-no">2166</span><span id="line-2166">    }</span>
+<span class="source-line-no">2167</span><span id="line-2167"></span>
+<span class="source-line-no">2168</span><span id="line-2168">    @Override</span>
+<span class="source-line-no">2169</span><span id="line-2169">    public byte[] getRowArray() {</span>
+<span class="source-line-no">2170</span><span id="line-2170">      return this.row;</span>
+<span class="source-line-no">2171</span><span id="line-2171">    }</span>
+<span class="source-line-no">2172</span><span id="line-2172"></span>
+<span class="source-line-no">2173</span><span id="line-2173">    @Override</span>
+<span class="source-line-no">2174</span><span id="line-2174">    public short getRowLength() {</span>
+<span class="source-line-no">2175</span><span id="line-2175">      return (short) this.row.length;</span>
+<span class="source-line-no">2176</span><span id="line-2176">    }</span>
+<span class="source-line-no">2177</span><span id="line-2177"></span>
+<span class="source-line-no">2178</span><span id="line-2178">    @Override</span>
+<span class="source-line-no">2179</span><span id="line-2179">    public byte[] getFamilyArray() {</span>
+<span class="source-line-no">2180</span><span id="line-2180">      return this.fam;</span>
+<span class="source-line-no">2181</span><span id="line-2181">    }</span>
+<span class="source-line-no">2182</span><span id="line-2182"></span>
+<span class="source-line-no">2183</span><span id="line-2183">    @Override</span>
+<span class="source-line-no">2184</span><span id="line-2184">    public byte getFamilyLength() {</span>
+<span class="source-line-no">2185</span><span id="line-2185">      return (byte) this.fam.length;</span>
+<span class="source-line-no">2186</span><span id="line-2186">    }</span>
+<span class="source-line-no">2187</span><span id="line-2187"></span>
+<span class="source-line-no">2188</span><span id="line-2188">    @Override</span>
+<span class="source-line-no">2189</span><span id="line-2189">    public long getTimestamp() {</span>
+<span class="source-line-no">2190</span><span id="line-2190">      return HConstants.LATEST_TIMESTAMP;</span>
+<span class="source-line-no">2191</span><span id="line-2191">    }</span>
+<span class="source-line-no">2192</span><span id="line-2192"></span>
+<span class="source-line-no">2193</span><span id="line-2193">    @Override</span>
+<span class="source-line-no">2194</span><span id="line-2194">    public byte getTypeByte() {</span>
+<span class="source-line-no">2195</span><span id="line-2195">      return KeyValue.Type.DeleteFamily.getCode();</span>
+<span class="source-line-no">2196</span><span id="line-2196">    }</span>
+<span class="source-line-no">2197</span><span id="line-2197"></span>
+<span class="source-line-no">2198</span><span id="line-2198">    @Override</span>
+<span class="source-line-no">2199</span><span id="line-2199">    public Type getType() {</span>
+<span class="source-line-no">2200</span><span id="line-2200">      return Type.DeleteFamily;</span>
+<span class="source-line-no">2201</span><span id="line-2201">    }</span>
+<span class="source-line-no">2202</span><span id="line-2202">  }</span>
+<span class="source-line-no">2203</span><span id="line-2203"></span>
+<span class="source-line-no">2204</span><span id="line-2204">  /**</span>
+<span class="source-line-no">2205</span><span id="line-2205">   * Writes the Cell's key part as it would have serialized in a KeyValue. The format is &amp;lt;2 bytes</span>
+<span class="source-line-no">2206</span><span id="line-2206">   * rk len&amp;gt;&amp;lt;rk&amp;gt;&amp;lt;1 byte cf len&amp;gt;&amp;lt;cf&amp;gt;&amp;lt;qualifier&amp;gt;&amp;lt;8 bytes</span>
+<span class="source-line-no">2207</span><span id="line-2207">   * timestamp&amp;gt;&amp;lt;1 byte type&amp;gt;</span>
+<span class="source-line-no">2208</span><span id="line-2208">   */</span>
+<span class="source-line-no">2209</span><span id="line-2209">  public static void writeFlatKey(ExtendedCell cell, DataOutput out) throws IOException {</span>
+<span class="source-line-no">2210</span><span id="line-2210">    short rowLen = cell.getRowLength();</span>
+<span class="source-line-no">2211</span><span id="line-2211">    byte fLen = cell.getFamilyLength();</span>
+<span class="source-line-no">2212</span><span id="line-2212">    int qLen = cell.getQualifierLength();</span>
+<span class="source-line-no">2213</span><span id="line-2213">    // Using just one if/else loop instead of every time checking before writing every</span>
+<span class="source-line-no">2214</span><span id="line-2214">    // component of cell</span>
+<span class="source-line-no">2215</span><span id="line-2215">    if (cell instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">2216</span><span id="line-2216">      out.writeShort(rowLen);</span>
+<span class="source-line-no">2217</span><span id="line-2217">      ByteBufferUtils.copyBufferToStream(out, ((ByteBufferExtendedCell) cell).getRowByteBuffer(),</span>
+<span class="source-line-no">2218</span><span id="line-2218">        ((ByteBufferExtendedCell) cell).getRowPosition(), rowLen);</span>
+<span class="source-line-no">2219</span><span id="line-2219">      out.writeByte(fLen);</span>
+<span class="source-line-no">2220</span><span id="line-2220">      ByteBufferUtils.copyBufferToStream(out, ((ByteBufferExtendedCell) cell).getFamilyByteBuffer(),</span>
+<span class="source-line-no">2221</span><span id="line-2221">        ((ByteBufferExtendedCell) cell).getFamilyPosition(), fLen);</span>
+<span class="source-line-no">2222</span><span id="line-2222">      ByteBufferUtils.copyBufferToStream(out,</span>
+<span class="source-line-no">2223</span><span id="line-2223">        ((ByteBufferExtendedCell) cell).getQualifierByteBuffer(),</span>
+<span class="source-line-no">2224</span><span id="line-2224">        ((ByteBufferExtendedCell) cell).getQualifierPosition(), qLen);</span>
+<span class="source-line-no">2225</span><span id="line-2225">    } else {</span>
+<span class="source-line-no">2226</span><span id="line-2226">      out.writeShort(rowLen);</span>
+<span class="source-line-no">2227</span><span id="line-2227">      out.write(cell.getRowArray(), cell.getRowOffset(), rowLen);</span>
+<span class="source-line-no">2228</span><span id="line-2228">      out.writeByte(fLen);</span>
+<span class="source-line-no">2229</span><span id="line-2229">      out.write(cell.getFamilyArray(), cell.getFamilyOffset(), fLen);</span>
+<span class="source-line-no">2230</span><span id="line-2230">      out.write(cell.getQualifierArray(), cell.getQualifierOffset(), qLen);</span>
+<span class="source-line-no">2231</span><span id="line-2231">    }</span>
+<span class="source-line-no">2232</span><span id="line-2232">    out.writeLong(cell.getTimestamp());</span>
+<span class="source-line-no">2233</span><span id="line-2233">    out.writeByte(cell.getTypeByte());</span>
+<span class="source-line-no">2234</span><span id="line-2234">  }</span>
+<span class="source-line-no">2235</span><span id="line-2235"></span>
+<span class="source-line-no">2236</span><span id="line-2236">  public static int writeFlatKey(ExtendedCell cell, OutputStream out) throws IOException {</span>
+<span class="source-line-no">2237</span><span id="line-2237">    short rowLen = cell.getRowLength();</span>
+<span class="source-line-no">2238</span><span id="line-2238">    byte fLen = cell.getFamilyLength();</span>
+<span class="source-line-no">2239</span><span id="line-2239">    int qLen = cell.getQualifierLength();</span>
+<span class="source-line-no">2240</span><span id="line-2240">    // Using just one if/else loop instead of every time checking before writing every</span>
+<span class="source-line-no">2241</span><span id="line-2241">    // component of cell</span>
+<span class="source-line-no">2242</span><span id="line-2242">    if (cell instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">2243</span><span id="line-2243">      StreamUtils.writeShort(out, rowLen);</span>
+<span class="source-line-no">2244</span><span id="line-2244">      ByteBufferUtils.copyBufferToStream(out, ((ByteBufferExtendedCell) cell).getRowByteBuffer(),</span>
+<span class="source-line-no">2245</span><span id="line-2245">        ((ByteBufferExtendedCell) cell).getRowPosition(), rowLen);</span>
+<span class="source-line-no">2246</span><span id="line-2246">      out.write(fLen);</span>
+<span class="source-line-no">2247</span><span id="line-2247">      ByteBufferUtils.copyBufferToStream(out, ((ByteBufferExtendedCell) cell).getFamilyByteBuffer(),</span>
+<span class="source-line-no">2248</span><span id="line-2248">        ((ByteBufferExtendedCell) cell).getFamilyPosition(), fLen);</span>
+<span class="source-line-no">2249</span><span id="line-2249">      ByteBufferUtils.copyBufferToStream(out,</span>
+<span class="source-line-no">2250</span><span id="line-2250">        ((ByteBufferExtendedCell) cell).getQualifierByteBuffer(),</span>
+<span class="source-line-no">2251</span><span id="line-2251">        ((ByteBufferExtendedCell) cell).getQualifierPosition(), qLen);</span>
+<span class="source-line-no">2252</span><span id="line-2252">    } else {</span>
+<span class="source-line-no">2253</span><span id="line-2253">      StreamUtils.writeShort(out, rowLen);</span>
+<span class="source-line-no">2254</span><span id="line-2254">      out.write(cell.getRowArray(), cell.getRowOffset(), rowLen);</span>
+<span class="source-line-no">2255</span><span id="line-2255">      out.write(fLen);</span>
+<span class="source-line-no">2256</span><span id="line-2256">      out.write(cell.getFamilyArray(), cell.getFamilyOffset(), fLen);</span>
+<span class="source-line-no">2257</span><span id="line-2257">      out.write(cell.getQualifierArray(), cell.getQualifierOffset(), qLen);</span>
+<span class="source-line-no">2258</span><span id="line-2258">    }</span>
+<span class="source-line-no">2259</span><span id="line-2259">    StreamUtils.writeLong(out, cell.getTimestamp());</span>
+<span class="source-line-no">2260</span><span id="line-2260">    out.write(cell.getTypeByte());</span>
+<span class="source-line-no">2261</span><span id="line-2261">    return Bytes.SIZEOF_SHORT + rowLen + Bytes.SIZEOF_BYTE + fLen + qLen + Bytes.SIZEOF_LONG</span>
+<span class="source-line-no">2262</span><span id="line-2262">      + Bytes.SIZEOF_BYTE;</span>
+<span class="source-line-no">2263</span><span id="line-2263">  }</span>
+<span class="source-line-no">2264</span><span id="line-2264"></span>
+<span class="source-line-no">2265</span><span id="line-2265">  /**</span>
+<span class="source-line-no">2266</span><span id="line-2266">   * Sets the given seqId to the cell. Marked as audience Private as of 1.2.0. Setting a Cell</span>
+<span class="source-line-no">2267</span><span id="line-2267">   * sequenceid is an internal implementation detail not for general public use.</span>
+<span class="source-line-no">2268</span><span id="line-2268">   * @throws IOException when the passed cell is not of type {@link ExtendedCell}</span>
+<span class="source-line-no">2269</span><span id="line-2269">   */</span>
+<span class="source-line-no">2270</span><span id="line-2270">  public static void setSequenceId(Cell cell, long seqId) throws IOException {</span>
+<span class="source-line-no">2271</span><span id="line-2271">    if (cell instanceof ExtendedCell) {</span>
+<span class="source-line-no">2272</span><span id="line-2272">      ((ExtendedCell) cell).setSequenceId(seqId);</span>
+<span class="source-line-no">2273</span><span id="line-2273">    } else {</span>
+<span class="source-line-no">2274</span><span id="line-2274">      throw new IOException(</span>
+<span class="source-line-no">2275</span><span id="line-2275">        new UnsupportedOperationException("Cell is not of type " + ExtendedCell.class.getName()));</span>
+<span class="source-line-no">2276</span><span id="line-2276">    }</span>
+<span class="source-line-no">2277</span><span id="line-2277">  }</span>
+<span class="source-line-no">2278</span><span id="line-2278"></span>
+<span class="source-line-no">2279</span><span id="line-2279">  /**</span>
+<span class="source-line-no">2280</span><span id="line-2280">   * Sets the given timestamp to the cell.</span>
+<span class="source-line-no">2281</span><span id="line-2281">   * @throws IOException when the passed cell is not of type {@link ExtendedCell}</span>
+<span class="source-line-no">2282</span><span id="line-2282">   */</span>
+<span class="source-line-no">2283</span><span id="line-2283">  public static void setTimestamp(Cell cell, long ts) throws IOException {</span>
+<span class="source-line-no">2284</span><span id="line-2284">    if (cell instanceof ExtendedCell) {</span>
+<span class="source-line-no">2285</span><span id="line-2285">      ((ExtendedCell) cell).setTimestamp(ts);</span>
+<span class="source-line-no">2286</span><span id="line-2286">    } else {</span>
+<span class="source-line-no">2287</span><span id="line-2287">      throw new IOException(</span>
+<span class="source-line-no">2288</span><span id="line-2288">        new UnsupportedOperationException("Cell is not of type " + ExtendedCell.class.getName()));</span>
+<span class="source-line-no">2289</span><span id="line-2289">    }</span>
+<span class="source-line-no">2290</span><span id="line-2290">  }</span>
+<span class="source-line-no">2291</span><span id="line-2291"></span>
+<span class="source-line-no">2292</span><span id="line-2292">  /**</span>
+<span class="source-line-no">2293</span><span id="line-2293">   * Sets the given timestamp to the cell.</span>
+<span class="source-line-no">2294</span><span id="line-2294">   * @throws IOException when the passed cell is not of type {@link ExtendedCell}</span>
+<span class="source-line-no">2295</span><span id="line-2295">   */</span>
+<span class="source-line-no">2296</span><span id="line-2296">  public static void setTimestamp(Cell cell, byte[] ts) throws IOException {</span>
+<span class="source-line-no">2297</span><span id="line-2297">    if (cell instanceof ExtendedCell) {</span>
+<span class="source-line-no">2298</span><span id="line-2298">      ((ExtendedCell) cell).setTimestamp(ts);</span>
+<span class="source-line-no">2299</span><span id="line-2299">    } else {</span>
+<span class="source-line-no">2300</span><span id="line-2300">      throw new IOException(</span>
+<span class="source-line-no">2301</span><span id="line-2301">        new UnsupportedOperationException("Cell is not of type " + ExtendedCell.class.getName()));</span>
+<span class="source-line-no">2302</span><span id="line-2302">    }</span>
+<span class="source-line-no">2303</span><span id="line-2303">  }</span>
+<span class="source-line-no">2304</span><span id="line-2304"></span>
+<span class="source-line-no">2305</span><span id="line-2305">  /**</span>
+<span class="source-line-no">2306</span><span id="line-2306">   * Sets the given timestamp to the cell iff current timestamp is</span>
+<span class="source-line-no">2307</span><span id="line-2307">   * {@link HConstants#LATEST_TIMESTAMP}.</span>
+<span class="source-line-no">2308</span><span id="line-2308">   * @return True if cell timestamp is modified.</span>
+<span class="source-line-no">2309</span><span id="line-2309">   * @throws IOException when the passed cell is not of type {@link ExtendedCell}</span>
+<span class="source-line-no">2310</span><span id="line-2310">   */</span>
+<span class="source-line-no">2311</span><span id="line-2311">  public static boolean updateLatestStamp(ExtendedCell cell, long ts) throws IOException {</span>
+<span class="source-line-no">2312</span><span id="line-2312">    if (cell.getTimestamp() == HConstants.LATEST_TIMESTAMP) {</span>
+<span class="source-line-no">2313</span><span id="line-2313">      cell.setTimestamp(ts);</span>
+<span class="source-line-no">2314</span><span id="line-2314">      return true;</span>
+<span class="source-line-no">2315</span><span id="line-2315">    }</span>
+<span class="source-line-no">2316</span><span id="line-2316">    return false;</span>
+<span class="source-line-no">2317</span><span id="line-2317">  }</span>
+<span class="source-line-no">2318</span><span id="line-2318"></span>
+<span class="source-line-no">2319</span><span id="line-2319">  /**</span>
+<span class="source-line-no">2320</span><span id="line-2320">   * Sets the given timestamp to the cell iff current timestamp is</span>
+<span class="source-line-no">2321</span><span id="line-2321">   * {@link HConstants#LATEST_TIMESTAMP}.</span>
+<span class="source-line-no">2322</span><span id="line-2322">   * @return True if cell timestamp is modified.</span>
+<span class="source-line-no">2323</span><span id="line-2323">   * @throws IOException when the passed cell is not of type {@link ExtendedCell}</span>
+<span class="source-line-no">2324</span><span id="line-2324">   */</span>
+<span class="source-line-no">2325</span><span id="line-2325">  public static boolean updateLatestStamp(Cell cell, byte[] ts) throws IOException {</span>
+<span class="source-line-no">2326</span><span id="line-2326">    if (cell.getTimestamp() == HConstants.LATEST_TIMESTAMP) {</span>
+<span class="source-line-no">2327</span><span id="line-2327">      setTimestamp(cell, ts);</span>
+<span class="source-line-no">2328</span><span id="line-2328">      return true;</span>
+<span class="source-line-no">2329</span><span id="line-2329">    }</span>
+<span class="source-line-no">2330</span><span id="line-2330">    return false;</span>
+<span class="source-line-no">2331</span><span id="line-2331">  }</span>
+<span class="source-line-no">2332</span><span id="line-2332"></span>
+<span class="source-line-no">2333</span><span id="line-2333">  /**</span>
+<span class="source-line-no">2334</span><span id="line-2334">   * Writes the row from the given cell to the output stream</span>
+<span class="source-line-no">2335</span><span id="line-2335">   * @param out     The outputstream to which the data has to be written</span>
+<span class="source-line-no">2336</span><span id="line-2336">   * @param cell    The cell whose contents has to be written</span>
+<span class="source-line-no">2337</span><span id="line-2337">   * @param rlength the row length</span>
+<span class="source-line-no">2338</span><span id="line-2338">   */</span>
+<span class="source-line-no">2339</span><span id="line-2339">  public static void writeRow(OutputStream out, Cell cell, short rlength) throws IOException {</span>
+<span class="source-line-no">2340</span><span id="line-2340">    if (cell instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">2341</span><span id="line-2341">      ByteBufferUtils.copyBufferToStream(out, ((ByteBufferExtendedCell) cell).getRowByteBuffer(),</span>
+<span class="source-line-no">2342</span><span id="line-2342">        ((ByteBufferExtendedCell) cell).getRowPosition(), rlength);</span>
+<span class="source-line-no">2343</span><span id="line-2343">    } else {</span>
+<span class="source-line-no">2344</span><span id="line-2344">      out.write(cell.getRowArray(), cell.getRowOffset(), rlength);</span>
+<span class="source-line-no">2345</span><span id="line-2345">    }</span>
+<span class="source-line-no">2346</span><span id="line-2346">  }</span>
+<span class="source-line-no">2347</span><span id="line-2347"></span>
+<span class="source-line-no">2348</span><span id="line-2348">  /**</span>
+<span class="source-line-no">2349</span><span id="line-2349">   * Writes the family from the given cell to the output stream</span>
+<span class="source-line-no">2350</span><span id="line-2350">   * @param out     The outputstream to which the data has to be written</span>
+<span class="source-line-no">2351</span><span id="line-2351">   * @param cell    The cell whose contents has to be written</span>
+<span class="source-line-no">2352</span><span id="line-2352">   * @param flength the family length</span>
+<span class="source-line-no">2353</span><span id="line-2353">   */</span>
+<span class="source-line-no">2354</span><span id="line-2354">  public static void writeFamily(OutputStream out, Cell cell, byte flength) throws IOException {</span>
+<span class="source-line-no">2355</span><span id="line-2355">    if (cell instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">2356</span><span id="line-2356">      ByteBufferUtils.copyBufferToStream(out, ((ByteBufferExtendedCell) cell).getFamilyByteBuffer(),</span>
+<span class="source-line-no">2357</span><span id="line-2357">        ((ByteBufferExtendedCell) cell).getFamilyPosition(), flength);</span>
+<span class="source-line-no">2358</span><span id="line-2358">    } else {</span>
+<span class="source-line-no">2359</span><span id="line-2359">      out.write(cell.getFamilyArray(), cell.getFamilyOffset(), flength);</span>
+<span class="source-line-no">2360</span><span id="line-2360">    }</span>
+<span class="source-line-no">2361</span><span id="line-2361">  }</span>
+<span class="source-line-no">2362</span><span id="line-2362"></span>
+<span class="source-line-no">2363</span><span id="line-2363">  /**</span>
+<span class="source-line-no">2364</span><span id="line-2364">   * Writes the qualifier from the given cell to the output stream</span>
+<span class="source-line-no">2365</span><span id="line-2365">   * @param out     The outputstream to which the data has to be written</span>
+<span class="source-line-no">2366</span><span id="line-2366">   * @param cell    The cell whose contents has to be written</span>
+<span class="source-line-no">2367</span><span id="line-2367">   * @param qlength the qualifier length</span>
+<span class="source-line-no">2368</span><span id="line-2368">   */</span>
+<span class="source-line-no">2369</span><span id="line-2369">  public static void writeQualifier(OutputStream out, Cell cell, int qlength) throws IOException {</span>
+<span class="source-line-no">2370</span><span id="line-2370">    if (cell instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">2371</span><span id="line-2371">      ByteBufferUtils.copyBufferToStream(out,</span>
+<span class="source-line-no">2372</span><span id="line-2372">        ((ByteBufferExtendedCell) cell).getQualifierByteBuffer(),</span>
+<span class="source-line-no">2373</span><span id="line-2373">        ((ByteBufferExtendedCell) cell).getQualifierPosition(), qlength);</span>
+<span class="source-line-no">2374</span><span id="line-2374">    } else {</span>
+<span class="source-line-no">2375</span><span id="line-2375">      out.write(cell.getQualifierArray(), cell.getQualifierOffset(), qlength);</span>
+<span class="source-line-no">2376</span><span id="line-2376">    }</span>
+<span class="source-line-no">2377</span><span id="line-2377">  }</span>
+<span class="source-line-no">2378</span><span id="line-2378"></span>
+<span class="source-line-no">2379</span><span id="line-2379">  /**</span>
+<span class="source-line-no">2380</span><span id="line-2380">   * Writes the qualifier from the given cell to the output stream excluding the common prefix</span>
+<span class="source-line-no">2381</span><span id="line-2381">   * @param out     The dataoutputstream to which the data has to be written</span>
+<span class="source-line-no">2382</span><span id="line-2382">   * @param cell    The cell whose contents has to be written</span>
+<span class="source-line-no">2383</span><span id="line-2383">   * @param qlength the qualifier length</span>
+<span class="source-line-no">2384</span><span id="line-2384">   */</span>
+<span class="source-line-no">2385</span><span id="line-2385">  public static void writeQualifierSkippingBytes(DataOutputStream out, Cell cell, int qlength,</span>
+<span class="source-line-no">2386</span><span id="line-2386">    int commonPrefix) throws IOException {</span>
+<span class="source-line-no">2387</span><span id="line-2387">    if (cell instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">2388</span><span id="line-2388">      ByteBufferUtils.copyBufferToStream((DataOutput) out,</span>
+<span class="source-line-no">2389</span><span id="line-2389">        ((ByteBufferExtendedCell) cell).getQualifierByteBuffer(),</span>
+<span class="source-line-no">2390</span><span id="line-2390">        ((ByteBufferExtendedCell) cell).getQualifierPosition() + commonPrefix,</span>
+<span class="source-line-no">2391</span><span id="line-2391">        qlength - commonPrefix);</span>
+<span class="source-line-no">2392</span><span id="line-2392">    } else {</span>
+<span class="source-line-no">2393</span><span id="line-2393">      out.write(cell.getQualifierArray(), cell.getQualifierOffset() + commonPrefix,</span>
+<span class="source-line-no">2394</span><span id="line-2394">        qlength - commonPrefix);</span>
+<span class="source-line-no">2395</span><span id="line-2395">    }</span>
+<span class="source-line-no">2396</span><span id="line-2396">  }</span>
+<span class="source-line-no">2397</span><span id="line-2397"></span>
+<span class="source-line-no">2398</span><span id="line-2398">  /**</span>
+<span class="source-line-no">2399</span><span id="line-2399">   * Writes the value from the given cell to the output stream</span>
+<span class="source-line-no">2400</span><span id="line-2400">   * @param out     The outputstream to which the data has to be written</span>
+<span class="source-line-no">2401</span><span id="line-2401">   * @param cell    The cell whose contents has to be written</span>
+<span class="source-line-no">2402</span><span id="line-2402">   * @param vlength the value length</span>
+<span class="source-line-no">2403</span><span id="line-2403">   */</span>
+<span class="source-line-no">2404</span><span id="line-2404">  public static void writeValue(OutputStream out, ExtendedCell cell, int vlength)</span>
+<span class="source-line-no">2405</span><span id="line-2405">    throws IOException {</span>
+<span class="source-line-no">2406</span><span id="line-2406">    if (cell instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">2407</span><span id="line-2407">      ByteBufferUtils.copyBufferToStream(out, ((ByteBufferExtendedCell) cell).getValueByteBuffer(),</span>
+<span class="source-line-no">2408</span><span id="line-2408">        ((ByteBufferExtendedCell) cell).getValuePosition(), vlength);</span>
+<span class="source-line-no">2409</span><span id="line-2409">    } else {</span>
+<span class="source-line-no">2410</span><span id="line-2410">      out.write(cell.getValueArray(), cell.getValueOffset(), vlength);</span>
+<span class="source-line-no">2411</span><span id="line-2411">    }</span>
+<span class="source-line-no">2412</span><span id="line-2412">  }</span>
+<span class="source-line-no">2413</span><span id="line-2413"></span>
+<span class="source-line-no">2414</span><span id="line-2414">  /**</span>
+<span class="source-line-no">2415</span><span id="line-2415">   * Writes the tag from the given cell to the output stream</span>
+<span class="source-line-no">2416</span><span id="line-2416">   * @param out        The outputstream to which the data has to be written</span>
+<span class="source-line-no">2417</span><span id="line-2417">   * @param cell       The cell whose contents has to be written</span>
+<span class="source-line-no">2418</span><span id="line-2418">   * @param tagsLength the tag length</span>
+<span class="source-line-no">2419</span><span id="line-2419">   */</span>
+<span class="source-line-no">2420</span><span id="line-2420">  public static void writeTags(OutputStream out, ExtendedCell cell, int tagsLength)</span>
+<span class="source-line-no">2421</span><span id="line-2421">    throws IOException {</span>
+<span class="source-line-no">2422</span><span id="line-2422">    if (cell instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">2423</span><span id="line-2423">      ByteBufferUtils.copyBufferToStream(out, ((ByteBufferExtendedCell) cell).getTagsByteBuffer(),</span>
+<span class="source-line-no">2424</span><span id="line-2424">        ((ByteBufferExtendedCell) cell).getTagsPosition(), tagsLength);</span>
+<span class="source-line-no">2425</span><span id="line-2425">    } else {</span>
+<span class="source-line-no">2426</span><span id="line-2426">      out.write(cell.getTagsArray(), cell.getTagsOffset(), tagsLength);</span>
+<span class="source-line-no">2427</span><span id="line-2427">    }</span>
+<span class="source-line-no">2428</span><span id="line-2428">  }</span>
+<span class="source-line-no">2429</span><span id="line-2429"></span>
+<span class="source-line-no">2430</span><span id="line-2430">  /**</span>
+<span class="source-line-no">2431</span><span id="line-2431">   * special case for Cell.equals</span>
+<span class="source-line-no">2432</span><span id="line-2432">   */</span>
+<span class="source-line-no">2433</span><span id="line-2433">  public static boolean equalsIgnoreMvccVersion(ExtendedCell a, ExtendedCell b) {</span>
+<span class="source-line-no">2434</span><span id="line-2434">    // row</span>
+<span class="source-line-no">2435</span><span id="line-2435">    boolean res = CellUtil.matchingRows(a, b);</span>
+<span class="source-line-no">2436</span><span id="line-2436">    if (!res) {</span>
+<span class="source-line-no">2437</span><span id="line-2437">      return res;</span>
+<span class="source-line-no">2438</span><span id="line-2438">    }</span>
+<span class="source-line-no">2439</span><span id="line-2439"></span>
+<span class="source-line-no">2440</span><span id="line-2440">    // family</span>
+<span class="source-line-no">2441</span><span id="line-2441">    res = CellUtil.matchingColumn(a, b);</span>
+<span class="source-line-no">2442</span><span id="line-2442">    if (!res) {</span>
+<span class="source-line-no">2443</span><span id="line-2443">      return res;</span>
+<span class="source-line-no">2444</span><span id="line-2444">    }</span>
+<span class="source-line-no">2445</span><span id="line-2445"></span>
+<span class="source-line-no">2446</span><span id="line-2446">    // timestamp: later sorts first</span>
+<span class="source-line-no">2447</span><span id="line-2447">    if (!CellUtil.matchingTimestamp(a, b)) {</span>
+<span class="source-line-no">2448</span><span id="line-2448">      return false;</span>
+<span class="source-line-no">2449</span><span id="line-2449">    }</span>
+<span class="source-line-no">2450</span><span id="line-2450"></span>
+<span class="source-line-no">2451</span><span id="line-2451">    // type</span>
+<span class="source-line-no">2452</span><span id="line-2452">    int c = (0xff &amp; b.getTypeByte()) - (0xff &amp; a.getTypeByte());</span>
+<span class="source-line-no">2453</span><span id="line-2453">    if (c != 0) {</span>
+<span class="source-line-no">2454</span><span id="line-2454">      return false;</span>
+<span class="source-line-no">2455</span><span id="line-2455">    } else {</span>
+<span class="source-line-no">2456</span><span id="line-2456">      return true;</span>
+<span class="source-line-no">2457</span><span id="line-2457">    }</span>
+<span class="source-line-no">2458</span><span id="line-2458">  }</span>
+<span class="source-line-no">2459</span><span id="line-2459"></span>
+<span class="source-line-no">2460</span><span id="line-2460">  /**</span>
+<span class="source-line-no">2461</span><span id="line-2461">   * Converts the rowkey bytes of the given cell into an int value</span>
+<span class="source-line-no">2462</span><span id="line-2462">   * @return rowkey as int</span>
+<span class="source-line-no">2463</span><span id="line-2463">   */</span>
+<span class="source-line-no">2464</span><span id="line-2464">  public static int getRowAsInt(Cell cell) {</span>
+<span class="source-line-no">2465</span><span id="line-2465">    if (cell instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">2466</span><span id="line-2466">      return ByteBufferUtils.toInt(((ByteBufferExtendedCell) cell).getRowByteBuffer(),</span>
+<span class="source-line-no">2467</span><span id="line-2467">        ((ByteBufferExtendedCell) cell).getRowPosition());</span>
+<span class="source-line-no">2468</span><span id="line-2468">    }</span>
+<span class="source-line-no">2469</span><span id="line-2469">    return Bytes.toInt(cell.getRowArray(), cell.getRowOffset());</span>
+<span class="source-line-no">2470</span><span id="line-2470">  }</span>
+<span class="source-line-no">2471</span><span id="line-2471"></span>
+<span class="source-line-no">2472</span><span id="line-2472">  /**</span>
+<span class="source-line-no">2473</span><span id="line-2473">   * Converts the value bytes of the given cell into a long value</span>
+<span class="source-line-no">2474</span><span id="line-2474">   * @return value as long</span>
+<span class="source-line-no">2475</span><span id="line-2475">   */</span>
+<span class="source-line-no">2476</span><span id="line-2476">  public static long getValueAsLong(Cell cell) {</span>
+<span class="source-line-no">2477</span><span id="line-2477">    if (cell instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">2478</span><span id="line-2478">      return ByteBufferUtils.toLong(((ByteBufferExtendedCell) cell).getValueByteBuffer(),</span>
+<span class="source-line-no">2479</span><span id="line-2479">        ((ByteBufferExtendedCell) cell).getValuePosition());</span>
+<span class="source-line-no">2480</span><span id="line-2480">    }</span>
+<span class="source-line-no">2481</span><span id="line-2481">    return Bytes.toLong(cell.getValueArray(), cell.getValueOffset());</span>
+<span class="source-line-no">2482</span><span id="line-2482">  }</span>
+<span class="source-line-no">2483</span><span id="line-2483"></span>
+<span class="source-line-no">2484</span><span id="line-2484">  /**</span>
+<span class="source-line-no">2485</span><span id="line-2485">   * Converts the value bytes of the given cell into a int value</span>
+<span class="source-line-no">2486</span><span id="line-2486">   * @return value as int</span>
+<span class="source-line-no">2487</span><span id="line-2487">   */</span>
+<span class="source-line-no">2488</span><span id="line-2488">  public static int getValueAsInt(Cell cell) {</span>
+<span class="source-line-no">2489</span><span id="line-2489">    if (cell instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">2490</span><span id="line-2490">      return ByteBufferUtils.toInt(((ByteBufferExtendedCell) cell).getValueByteBuffer(),</span>
+<span class="source-line-no">2491</span><span id="line-2491">        ((ByteBufferExtendedCell) cell).getValuePosition());</span>
+<span class="source-line-no">2492</span><span id="line-2492">    }</span>
+<span class="source-line-no">2493</span><span id="line-2493">    return Bytes.toInt(cell.getValueArray(), cell.getValueOffset());</span>
+<span class="source-line-no">2494</span><span id="line-2494">  }</span>
+<span class="source-line-no">2495</span><span id="line-2495"></span>
+<span class="source-line-no">2496</span><span id="line-2496">  /**</span>
+<span class="source-line-no">2497</span><span id="line-2497">   * Converts the value bytes of the given cell into a double value</span>
+<span class="source-line-no">2498</span><span id="line-2498">   * @return value as double</span>
+<span class="source-line-no">2499</span><span id="line-2499">   */</span>
+<span class="source-line-no">2500</span><span id="line-2500">  public static double getValueAsDouble(Cell cell) {</span>
+<span class="source-line-no">2501</span><span id="line-2501">    if (cell instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">2502</span><span id="line-2502">      return ByteBufferUtils.toDouble(((ByteBufferExtendedCell) cell).getValueByteBuffer(),</span>
+<span class="source-line-no">2503</span><span id="line-2503">        ((ByteBufferExtendedCell) cell).getValuePosition());</span>
+<span class="source-line-no">2504</span><span id="line-2504">    }</span>
+<span class="source-line-no">2505</span><span id="line-2505">    return Bytes.toDouble(cell.getValueArray(), cell.getValueOffset());</span>
+<span class="source-line-no">2506</span><span id="line-2506">  }</span>
+<span class="source-line-no">2507</span><span id="line-2507"></span>
+<span class="source-line-no">2508</span><span id="line-2508">  /**</span>
+<span class="source-line-no">2509</span><span id="line-2509">   * Converts the value bytes of the given cell into a BigDecimal</span>
+<span class="source-line-no">2510</span><span id="line-2510">   * @return value as BigDecimal</span>
+<span class="source-line-no">2511</span><span id="line-2511">   */</span>
+<span class="source-line-no">2512</span><span id="line-2512">  public static BigDecimal getValueAsBigDecimal(Cell cell) {</span>
+<span class="source-line-no">2513</span><span id="line-2513">    if (cell instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">2514</span><span id="line-2514">      return ByteBufferUtils.toBigDecimal(((ByteBufferExtendedCell) cell).getValueByteBuffer(),</span>
+<span class="source-line-no">2515</span><span id="line-2515">        ((ByteBufferExtendedCell) cell).getValuePosition(), cell.getValueLength());</span>
+<span class="source-line-no">2516</span><span id="line-2516">    }</span>
+<span class="source-line-no">2517</span><span id="line-2517">    return Bytes.toBigDecimal(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());</span>
+<span class="source-line-no">2518</span><span id="line-2518">  }</span>
+<span class="source-line-no">2519</span><span id="line-2519"></span>
+<span class="source-line-no">2520</span><span id="line-2520">  /**</span>
+<span class="source-line-no">2521</span><span id="line-2521">   * Compresses the tags to the given outputstream using the TagcompressionContext</span>
+<span class="source-line-no">2522</span><span id="line-2522">   * @param out                   the outputstream to which the compression should happen</span>
+<span class="source-line-no">2523</span><span id="line-2523">   * @param cell                  the cell which has tags</span>
+<span class="source-line-no">2524</span><span id="line-2524">   * @param tagCompressionContext the TagCompressionContext</span>
+<span class="source-line-no">2525</span><span id="line-2525">   * @throws IOException can throw IOException if the compression encounters issue</span>
+<span class="source-line-no">2526</span><span id="line-2526">   */</span>
+<span class="source-line-no">2527</span><span id="line-2527">  public static void compressTags(OutputStream out, ExtendedCell cell,</span>
+<span class="source-line-no">2528</span><span id="line-2528">    TagCompressionContext tagCompressionContext) throws IOException {</span>
+<span class="source-line-no">2529</span><span id="line-2529">    if (cell instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">2530</span><span id="line-2530">      tagCompressionContext.compressTags(out, ((ByteBufferExtendedCell) cell).getTagsByteBuffer(),</span>
+<span class="source-line-no">2531</span><span id="line-2531">        ((ByteBufferExtendedCell) cell).getTagsPosition(), cell.getTagsLength());</span>
+<span class="source-line-no">2532</span><span id="line-2532">    } else {</span>
+<span class="source-line-no">2533</span><span id="line-2533">      tagCompressionContext.compressTags(out, cell.getTagsArray(), cell.getTagsOffset(),</span>
+<span class="source-line-no">2534</span><span id="line-2534">        cell.getTagsLength());</span>
+<span class="source-line-no">2535</span><span id="line-2535">    }</span>
+<span class="source-line-no">2536</span><span id="line-2536">  }</span>
+<span class="source-line-no">2537</span><span id="line-2537"></span>
+<span class="source-line-no">2538</span><span id="line-2538">  public static void compressRow(OutputStream out, Cell cell, Dictionary dict) throws IOException {</span>
+<span class="source-line-no">2539</span><span id="line-2539">    if (cell instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">2540</span><span id="line-2540">      Dictionary.write(out, ((ByteBufferExtendedCell) cell).getRowByteBuffer(),</span>
+<span class="source-line-no">2541</span><span id="line-2541">        ((ByteBufferExtendedCell) cell).getRowPosition(), cell.getRowLength(), dict);</span>
+<span class="source-line-no">2542</span><span id="line-2542">    } else {</span>
+<span class="source-line-no">2543</span><span id="line-2543">      Dictionary.write(out, cell.getRowArray(), cell.getRowOffset(), cell.getRowLength(), dict);</span>
+<span class="source-line-no">2544</span><span id="line-2544">    }</span>
+<span class="source-line-no">2545</span><span id="line-2545">  }</span>
+<span class="source-line-no">2546</span><span id="line-2546"></span>
+<span class="source-line-no">2547</span><span id="line-2547">  public static void compressFamily(OutputStream out, Cell cell, Dictionary dict)</span>
+<span class="source-line-no">2548</span><span id="line-2548">    throws IOException {</span>
+<span class="source-line-no">2549</span><span id="line-2549">    if (cell instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">2550</span><span id="line-2550">      Dictionary.write(out, ((ByteBufferExtendedCell) cell).getFamilyByteBuffer(),</span>
+<span class="source-line-no">2551</span><span id="line-2551">        ((ByteBufferExtendedCell) cell).getFamilyPosition(), cell.getFamilyLength(), dict);</span>
+<span class="source-line-no">2552</span><span id="line-2552">    } else {</span>
+<span class="source-line-no">2553</span><span id="line-2553">      Dictionary.write(out, cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength(),</span>
+<span class="source-line-no">2554</span><span id="line-2554">        dict);</span>
+<span class="source-line-no">2555</span><span id="line-2555">    }</span>
+<span class="source-line-no">2556</span><span id="line-2556">  }</span>
+<span class="source-line-no">2557</span><span id="line-2557"></span>
+<span class="source-line-no">2558</span><span id="line-2558">  public static void compressQualifier(OutputStream out, Cell cell, Dictionary dict)</span>
+<span class="source-line-no">2559</span><span id="line-2559">    throws IOException {</span>
+<span class="source-line-no">2560</span><span id="line-2560">    if (cell instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">2561</span><span id="line-2561">      Dictionary.write(out, ((ByteBufferExtendedCell) cell).getQualifierByteBuffer(),</span>
+<span class="source-line-no">2562</span><span id="line-2562">        ((ByteBufferExtendedCell) cell).getQualifierPosition(), cell.getQualifierLength(), dict);</span>
+<span class="source-line-no">2563</span><span id="line-2563">    } else {</span>
+<span class="source-line-no">2564</span><span id="line-2564">      Dictionary.write(out, cell.getQualifierArray(), cell.getQualifierOffset(),</span>
+<span class="source-line-no">2565</span><span id="line-2565">        cell.getQualifierLength(), dict);</span>
+<span class="source-line-no">2566</span><span id="line-2566">    }</span>
+<span class="source-line-no">2567</span><span id="line-2567">  }</span>
+<span class="source-line-no">2568</span><span id="line-2568"></span>
+<span class="source-line-no">2569</span><span id="line-2569">  /**</span>
+<span class="source-line-no">2570</span><span id="line-2570">   * Used when a cell needs to be compared with a key byte[] such as cases of finding the index from</span>
+<span class="source-line-no">2571</span><span id="line-2571">   * the index block, bloom keys from the bloom blocks This byte[] is expected to be serialized in</span>
+<span class="source-line-no">2572</span><span id="line-2572">   * the KeyValue serialization format If the KeyValue (Cell's) serialization format changes this</span>
+<span class="source-line-no">2573</span><span id="line-2573">   * method cannot be used.</span>
+<span class="source-line-no">2574</span><span id="line-2574">   * @param comparator the {@link CellComparator} to use for comparison</span>
+<span class="source-line-no">2575</span><span id="line-2575">   * @param left       the cell to be compared</span>
+<span class="source-line-no">2576</span><span id="line-2576">   * @param key        the serialized key part of a KeyValue</span>
+<span class="source-line-no">2577</span><span id="line-2577">   * @param offset     the offset in the key byte[]</span>
+<span class="source-line-no">2578</span><span id="line-2578">   * @param length     the length of the key byte[]</span>
+<span class="source-line-no">2579</span><span id="line-2579">   * @return an int greater than 0 if left is greater than right lesser than 0 if left is lesser</span>
+<span class="source-line-no">2580</span><span id="line-2580">   *         than right equal to 0 if left is equal to right</span>
+<span class="source-line-no">2581</span><span id="line-2581">   */</span>
+<span class="source-line-no">2582</span><span id="line-2582">  public static final int compare(CellComparator comparator, ExtendedCell left, byte[] key,</span>
+<span class="source-line-no">2583</span><span id="line-2583">    int offset, int length) {</span>
+<span class="source-line-no">2584</span><span id="line-2584">    // row</span>
+<span class="source-line-no">2585</span><span id="line-2585">    short rrowlength = Bytes.toShort(key, offset);</span>
+<span class="source-line-no">2586</span><span id="line-2586">    int c = comparator.compareRows(left, key, offset + Bytes.SIZEOF_SHORT, rrowlength);</span>
+<span class="source-line-no">2587</span><span id="line-2587">    if (c != 0) return c;</span>
+<span class="source-line-no">2588</span><span id="line-2588"></span>
+<span class="source-line-no">2589</span><span id="line-2589">    // Compare the rest of the two KVs without making any assumptions about</span>
+<span class="source-line-no">2590</span><span id="line-2590">    // the common prefix. This function will not compare rows anyway, so we</span>
+<span class="source-line-no">2591</span><span id="line-2591">    // don't need to tell it that the common prefix includes the row.</span>
+<span class="source-line-no">2592</span><span id="line-2592">    return compareWithoutRow(comparator, left, key, offset, length, rrowlength);</span>
+<span class="source-line-no">2593</span><span id="line-2593">  }</span>
+<span class="source-line-no">2594</span><span id="line-2594"></span>
+<span class="source-line-no">2595</span><span id="line-2595">  /**</span>
+<span class="source-line-no">2596</span><span id="line-2596">   * Compare columnFamily, qualifier, timestamp, and key type (everything except the row). This</span>
+<span class="source-line-no">2597</span><span id="line-2597">   * method is used both in the normal comparator and the "same-prefix" comparator. Note that we are</span>
+<span class="source-line-no">2598</span><span id="line-2598">   * assuming that row portions of both KVs have already been parsed and found identical, and we</span>
+<span class="source-line-no">2599</span><span id="line-2599">   * don't validate that assumption here.</span>
+<span class="source-line-no">2600</span><span id="line-2600">   * @param comparator the {@link CellComparator} to use for comparison</span>
+<span class="source-line-no">2601</span><span id="line-2601">   * @param left       the cell to be compared</span>
+<span class="source-line-no">2602</span><span id="line-2602">   * @param right      the serialized key part of a key-value</span>
+<span class="source-line-no">2603</span><span id="line-2603">   * @param roffset    the offset in the key byte[]</span>
+<span class="source-line-no">2604</span><span id="line-2604">   * @param rlength    the length of the key byte[]</span>
+<span class="source-line-no">2605</span><span id="line-2605">   * @param rowlength  the row length</span>
+<span class="source-line-no">2606</span><span id="line-2606">   * @return greater than 0 if left cell is bigger, less than 0 if right cell is bigger, 0 if both</span>
+<span class="source-line-no">2607</span><span id="line-2607">   *         cells are equal</span>
+<span class="source-line-no">2608</span><span id="line-2608">   */</span>
+<span class="source-line-no">2609</span><span id="line-2609">  static final int compareWithoutRow(CellComparator comparator, ExtendedCell left, byte[] right,</span>
+<span class="source-line-no">2610</span><span id="line-2610">    int roffset, int rlength, short rowlength) {</span>
+<span class="source-line-no">2611</span><span id="line-2611">    /***</span>
+<span class="source-line-no">2612</span><span id="line-2612">     * KeyValue Format and commonLength:</span>
+<span class="source-line-no">2613</span><span id="line-2613">     * |_keyLen_|_valLen_|_rowLen_|_rowKey_|_famiLen_|_fami_|_Quali_|....</span>
+<span class="source-line-no">2614</span><span id="line-2614">     * ------------------|-------commonLength--------|--------------</span>
+<span class="source-line-no">2615</span><span id="line-2615">     */</span>
+<span class="source-line-no">2616</span><span id="line-2616">    int commonLength = KeyValue.ROW_LENGTH_SIZE + KeyValue.FAMILY_LENGTH_SIZE + rowlength;</span>
+<span class="source-line-no">2617</span><span id="line-2617"></span>
+<span class="source-line-no">2618</span><span id="line-2618">    // commonLength + TIMESTAMP_TYPE_SIZE</span>
+<span class="source-line-no">2619</span><span id="line-2619">    int commonLengthWithTSAndType = KeyValue.TIMESTAMP_TYPE_SIZE + commonLength;</span>
+<span class="source-line-no">2620</span><span id="line-2620">    // ColumnFamily + Qualifier length.</span>
+<span class="source-line-no">2621</span><span id="line-2621">    int lcolumnlength = left.getFamilyLength() + left.getQualifierLength();</span>
+<span class="source-line-no">2622</span><span id="line-2622">    int rcolumnlength = rlength - commonLengthWithTSAndType;</span>
+<span class="source-line-no">2623</span><span id="line-2623"></span>
+<span class="source-line-no">2624</span><span id="line-2624">    byte ltype = left.getTypeByte();</span>
+<span class="source-line-no">2625</span><span id="line-2625">    byte rtype = right[roffset + (rlength - 1)];</span>
+<span class="source-line-no">2626</span><span id="line-2626"></span>
+<span class="source-line-no">2627</span><span id="line-2627">    // If the column is not specified, the "minimum" key type appears the</span>
+<span class="source-line-no">2628</span><span id="line-2628">    // latest in the sorted order, regardless of the timestamp. This is used</span>
+<span class="source-line-no">2629</span><span id="line-2629">    // for specifying the last key/value in a given row, because there is no</span>
+<span class="source-line-no">2630</span><span id="line-2630">    // "lexicographically last column" (it would be infinitely long). The</span>
+<span class="source-line-no">2631</span><span id="line-2631">    // "maximum" key type does not need this behavior.</span>
+<span class="source-line-no">2632</span><span id="line-2632">    if (lcolumnlength == 0 &amp;&amp; ltype == KeyValue.Type.Minimum.getCode()) {</span>
+<span class="source-line-no">2633</span><span id="line-2633">      // left is "bigger", i.e. it appears later in the sorted order</span>
+<span class="source-line-no">2634</span><span id="line-2634">      return 1;</span>
+<span class="source-line-no">2635</span><span id="line-2635">    }</span>
+<span class="source-line-no">2636</span><span id="line-2636">    if (rcolumnlength == 0 &amp;&amp; rtype == KeyValue.Type.Minimum.getCode()) {</span>
+<span class="source-line-no">2637</span><span id="line-2637">      return -1;</span>
+<span class="source-line-no">2638</span><span id="line-2638">    }</span>
+<span class="source-line-no">2639</span><span id="line-2639"></span>
+<span class="source-line-no">2640</span><span id="line-2640">    int rfamilyoffset = commonLength + roffset;</span>
+<span class="source-line-no">2641</span><span id="line-2641"></span>
+<span class="source-line-no">2642</span><span id="line-2642">    // Column family length.</span>
+<span class="source-line-no">2643</span><span id="line-2643">    int lfamilylength = left.getFamilyLength();</span>
+<span class="source-line-no">2644</span><span id="line-2644">    int rfamilylength = right[rfamilyoffset - 1];</span>
+<span class="source-line-no">2645</span><span id="line-2645">    // If left family size is not equal to right family size, we need not</span>
+<span class="source-line-no">2646</span><span id="line-2646">    // compare the qualifiers.</span>
+<span class="source-line-no">2647</span><span id="line-2647">    boolean sameFamilySize = (lfamilylength == rfamilylength);</span>
+<span class="source-line-no">2648</span><span id="line-2648">    if (!sameFamilySize) {</span>
+<span class="source-line-no">2649</span><span id="line-2649">      // comparing column family is enough.</span>
+<span class="source-line-no">2650</span><span id="line-2650">      return CellUtil.compareFamilies(left, right, rfamilyoffset, rfamilylength);</span>
+<span class="source-line-no">2651</span><span id="line-2651">    }</span>
+<span class="source-line-no">2652</span><span id="line-2652">    // Compare family &amp; qualifier together.</span>
+<span class="source-line-no">2653</span><span id="line-2653">    // Families are same. Compare on qualifiers.</span>
+<span class="source-line-no">2654</span><span id="line-2654">    int comparison = CellUtil.compareColumns(left, right, rfamilyoffset, rfamilylength,</span>
+<span class="source-line-no">2655</span><span id="line-2655">      rfamilyoffset + rfamilylength, (rcolumnlength - rfamilylength));</span>
+<span class="source-line-no">2656</span><span id="line-2656">    if (comparison != 0) {</span>
+<span class="source-line-no">2657</span><span id="line-2657">      return comparison;</span>
+<span class="source-line-no">2658</span><span id="line-2658">    }</span>
+<span class="source-line-no">2659</span><span id="line-2659"></span>
+<span class="source-line-no">2660</span><span id="line-2660">    // //</span>
+<span class="source-line-no">2661</span><span id="line-2661">    // Next compare timestamps.</span>
+<span class="source-line-no">2662</span><span id="line-2662">    long rtimestamp = Bytes.toLong(right, roffset + (rlength - KeyValue.TIMESTAMP_TYPE_SIZE));</span>
+<span class="source-line-no">2663</span><span id="line-2663">    int compare = comparator.compareTimestamps(left.getTimestamp(), rtimestamp);</span>
+<span class="source-line-no">2664</span><span id="line-2664">    if (compare != 0) {</span>
+<span class="source-line-no">2665</span><span id="line-2665">      return compare;</span>
+<span class="source-line-no">2666</span><span id="line-2666">    }</span>
+<span class="source-line-no">2667</span><span id="line-2667"></span>
+<span class="source-line-no">2668</span><span id="line-2668">    // Compare types. Let the delete types sort ahead of puts; i.e. types</span>
+<span class="source-line-no">2669</span><span id="line-2669">    // of higher numbers sort before those of lesser numbers. Maximum (255)</span>
+<span class="source-line-no">2670</span><span id="line-2670">    // appears ahead of everything, and minimum (0) appears after</span>
+<span class="source-line-no">2671</span><span id="line-2671">    // everything.</span>
+<span class="source-line-no">2672</span><span id="line-2672">    return (0xff &amp; rtype) - (0xff &amp; ltype);</span>
+<span class="source-line-no">2673</span><span id="line-2673">  }</span>
+<span class="source-line-no">2674</span><span id="line-2674"></span>
+<span class="source-line-no">2675</span><span id="line-2675">  /**</span>
+<span class="source-line-no">2676</span><span id="line-2676">   * Return a new cell is located following input cell. If both of type and timestamp are minimum,</span>
+<span class="source-line-no">2677</span><span id="line-2677">   * the input cell will be returned directly.</span>
+<span class="source-line-no">2678</span><span id="line-2678">   */</span>
+<span class="source-line-no">2679</span><span id="line-2679">  public static ExtendedCell createNextOnRowCol(ExtendedCell cell) {</span>
+<span class="source-line-no">2680</span><span id="line-2680">    long ts = cell.getTimestamp();</span>
+<span class="source-line-no">2681</span><span id="line-2681">    byte type = cell.getTypeByte();</span>
+<span class="source-line-no">2682</span><span id="line-2682">    if (type != KeyValue.Type.Minimum.getCode()) {</span>
+<span class="source-line-no">2683</span><span id="line-2683">      type = KeyValue.Type.values()[KeyValue.Type.codeToType(type).ordinal() - 1].getCode();</span>
+<span class="source-line-no">2684</span><span id="line-2684">    } else if (ts != PrivateConstants.OLDEST_TIMESTAMP) {</span>
+<span class="source-line-no">2685</span><span id="line-2685">      ts = ts - 1;</span>
+<span class="source-line-no">2686</span><span id="line-2686">      type = KeyValue.Type.Maximum.getCode();</span>
+<span class="source-line-no">2687</span><span id="line-2687">    } else {</span>
+<span class="source-line-no">2688</span><span id="line-2688">      return cell;</span>
+<span class="source-line-no">2689</span><span id="line-2689">    }</span>
+<span class="source-line-no">2690</span><span id="line-2690">    return createNextOnRowCol(cell, ts, type);</span>
+<span class="source-line-no">2691</span><span id="line-2691">  }</span>
+<span class="source-line-no">2692</span><span id="line-2692"></span>
+<span class="source-line-no">2693</span><span id="line-2693">  static ExtendedCell createNextOnRowCol(ExtendedCell cell, long ts, byte type) {</span>
+<span class="source-line-no">2694</span><span id="line-2694">    if (cell instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">2695</span><span id="line-2695">      return new LastOnRowColByteBufferExtendedCell(</span>
+<span class="source-line-no">2696</span><span id="line-2696">        ((ByteBufferExtendedCell) cell).getRowByteBuffer(),</span>
+<span class="source-line-no">2697</span><span id="line-2697">        ((ByteBufferExtendedCell) cell).getRowPosition(), cell.getRowLength(),</span>
+<span class="source-line-no">2698</span><span id="line-2698">        ((ByteBufferExtendedCell) cell).getFamilyByteBuffer(),</span>
+<span class="source-line-no">2699</span><span id="line-2699">        ((ByteBufferExtendedCell) cell).getFamilyPosition(), cell.getFamilyLength(),</span>
+<span class="source-line-no">2700</span><span id="line-2700">        ((ByteBufferExtendedCell) cell).getQualifierByteBuffer(),</span>
+<span class="source-line-no">2701</span><span id="line-2701">        ((ByteBufferExtendedCell) cell).getQualifierPosition(), cell.getQualifierLength()) {</span>
+<span class="source-line-no">2702</span><span id="line-2702">        @Override</span>
+<span class="source-line-no">2703</span><span id="line-2703">        public long getTimestamp() {</span>
+<span class="source-line-no">2704</span><span id="line-2704">          return ts;</span>
+<span class="source-line-no">2705</span><span id="line-2705">        }</span>
+<span class="source-line-no">2706</span><span id="line-2706"></span>
+<span class="source-line-no">2707</span><span id="line-2707">        @Override</span>
+<span class="source-line-no">2708</span><span id="line-2708">        public byte getTypeByte() {</span>
+<span class="source-line-no">2709</span><span id="line-2709">          return type;</span>
+<span class="source-line-no">2710</span><span id="line-2710">        }</span>
+<span class="source-line-no">2711</span><span id="line-2711">      };</span>
+<span class="source-line-no">2712</span><span id="line-2712">    }</span>
+<span class="source-line-no">2713</span><span id="line-2713">    return new LastOnRowColCell(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength(),</span>
+<span class="source-line-no">2714</span><span id="line-2714">      cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength(),</span>
+<span class="source-line-no">2715</span><span id="line-2715">      cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength()) {</span>
+<span class="source-line-no">2716</span><span id="line-2716">      @Override</span>
+<span class="source-line-no">2717</span><span id="line-2717">      public long getTimestamp() {</span>
+<span class="source-line-no">2718</span><span id="line-2718">        return ts;</span>
+<span class="source-line-no">2719</span><span id="line-2719">      }</span>
+<span class="source-line-no">2720</span><span id="line-2720"></span>
+<span class="source-line-no">2721</span><span id="line-2721">      @Override</span>
+<span class="source-line-no">2722</span><span id="line-2722">      public byte getTypeByte() {</span>
+<span class="source-line-no">2723</span><span id="line-2723">        return type;</span>
+<span class="source-line-no">2724</span><span id="line-2724">      }</span>
+<span class="source-line-no">2725</span><span id="line-2725">    };</span>
+<span class="source-line-no">2726</span><span id="line-2726">  }</span>
+<span class="source-line-no">2727</span><span id="line-2727"></span>
+<span class="source-line-no">2728</span><span id="line-2728">  /**</span>
+<span class="source-line-no">2729</span><span id="line-2729">   * Estimate based on keyvalue's serialization format in the RPC layer. Note that there is an extra</span>
+<span class="source-line-no">2730</span><span id="line-2730">   * SIZEOF_INT added to the size here that indicates the actual length of the cell for cases where</span>
+<span class="source-line-no">2731</span><span id="line-2731">   * cell's are serialized in a contiguous format (For eg in RPCs).</span>
+<span class="source-line-no">2732</span><span id="line-2732">   * @return Estimate of the &lt;code&gt;cell&lt;/code&gt; size in bytes plus an extra SIZEOF_INT indicating the</span>
+<span class="source-line-no">2733</span><span id="line-2733">   *         actual cell length.</span>
+<span class="source-line-no">2734</span><span id="line-2734">   */</span>
+<span class="source-line-no">2735</span><span id="line-2735">  public static int estimatedSerializedSizeOf(final Cell cell) {</span>
+<span class="source-line-no">2736</span><span id="line-2736">    return cell.getSerializedSize() + Bytes.SIZEOF_INT;</span>
+<span class="source-line-no">2737</span><span id="line-2737">  }</span>
+<span class="source-line-no">2738</span><span id="line-2738"></span>
+<span class="source-line-no">2739</span><span id="line-2739">  /**</span>
+<span class="source-line-no">2740</span><span id="line-2740">   * Calculates the serialized key size. We always serialize in the KeyValue's serialization format.</span>
+<span class="source-line-no">2741</span><span id="line-2741">   * @param cell the cell for which the key size has to be calculated.</span>
+<span class="source-line-no">2742</span><span id="line-2742">   * @return the key size</span>
+<span class="source-line-no">2743</span><span id="line-2743">   */</span>
+<span class="source-line-no">2744</span><span id="line-2744">  public static int estimatedSerializedSizeOfKey(final Cell cell) {</span>
+<span class="source-line-no">2745</span><span id="line-2745">    if (cell instanceof KeyValue) return ((KeyValue) cell).getKeyLength();</span>
+<span class="source-line-no">2746</span><span id="line-2746">    return cell.getRowLength() + cell.getFamilyLength() + cell.getQualifierLength()</span>
+<span class="source-line-no">2747</span><span id="line-2747">      + KeyValue.KEY_INFRASTRUCTURE_SIZE;</span>
+<span class="source-line-no">2748</span><span id="line-2748">  }</span>
+<span class="source-line-no">2749</span><span id="line-2749"></span>
+<span class="source-line-no">2750</span><span id="line-2750">  /**</span>
+<span class="source-line-no">2751</span><span id="line-2751">   * This method exists just to encapsulate how we serialize keys. To be replaced by a factory that</span>
+<span class="source-line-no">2752</span><span id="line-2752">   * we query to figure what the Cell implementation is and then, what serialization engine to use</span>
+<span class="source-line-no">2753</span><span id="line-2753">   * and further, how to serialize the key for inclusion in hfile index. TODO.</span>
+<span class="source-line-no">2754</span><span id="line-2754">   * @return The key portion of the Cell serialized in the old-school KeyValue way or null if passed</span>
+<span class="source-line-no">2755</span><span id="line-2755">   *         a null &lt;code&gt;cell&lt;/code&gt;</span>
+<span class="source-line-no">2756</span><span id="line-2756">   */</span>
+<span class="source-line-no">2757</span><span id="line-2757">  public static byte[] getCellKeySerializedAsKeyValueKey(final ExtendedCell cell) {</span>
+<span class="source-line-no">2758</span><span id="line-2758">    if (cell == null) return null;</span>
+<span class="source-line-no">2759</span><span id="line-2759">    byte[] b = new byte[KeyValueUtil.keyLength(cell)];</span>
+<span class="source-line-no">2760</span><span id="line-2760">    KeyValueUtil.appendKeyTo(cell, b, 0);</span>
+<span class="source-line-no">2761</span><span id="line-2761">    return b;</span>
+<span class="source-line-no">2762</span><span id="line-2762">  }</span>
+<span class="source-line-no">2763</span><span id="line-2763"></span>
+<span class="source-line-no">2764</span><span id="line-2764">  /**</span>
+<span class="source-line-no">2765</span><span id="line-2765">   * Create a Cell that is smaller than all other possible Cells for the given Cell's row.</span>
+<span class="source-line-no">2766</span><span id="line-2766">   * @return First possible Cell on passed Cell's row.</span>
+<span class="source-line-no">2767</span><span id="line-2767">   */</span>
+<span class="source-line-no">2768</span><span id="line-2768">  public static ExtendedCell createFirstOnRow(final Cell cell) {</span>
+<span class="source-line-no">2769</span><span id="line-2769">    if (cell instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">2770</span><span id="line-2770">      return new FirstOnRowByteBufferExtendedCell(</span>
+<span class="source-line-no">2771</span><span id="line-2771">        ((ByteBufferExtendedCell) cell).getRowByteBuffer(),</span>
+<span class="source-line-no">2772</span><span id="line-2772">        ((ByteBufferExtendedCell) cell).getRowPosition(), cell.getRowLength());</span>
+<span class="source-line-no">2773</span><span id="line-2773">    }</span>
+<span class="source-line-no">2774</span><span id="line-2774">    return new FirstOnRowCell(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength());</span>
+<span class="source-line-no">2775</span><span id="line-2775">  }</span>
+<span class="source-line-no">2776</span><span id="line-2776"></span>
+<span class="source-line-no">2777</span><span id="line-2777">  public static ExtendedCell createFirstOnRow(final byte[] row, int roffset, short rlength) {</span>
+<span class="source-line-no">2778</span><span id="line-2778">    return new FirstOnRowCell(row, roffset, rlength);</span>
+<span class="source-line-no">2779</span><span id="line-2779">  }</span>
+<span class="source-line-no">2780</span><span id="line-2780"></span>
+<span class="source-line-no">2781</span><span id="line-2781">  public static ExtendedCell createFirstOnRow(final byte[] row, final byte[] family,</span>
+<span class="source-line-no">2782</span><span id="line-2782">    final byte[] col) {</span>
+<span class="source-line-no">2783</span><span id="line-2783">    return createFirstOnRow(row, 0, (short) row.length, family, 0, (byte) family.length, col, 0,</span>
+<span class="source-line-no">2784</span><span id="line-2784">      col.length);</span>
+<span class="source-line-no">2785</span><span id="line-2785">  }</span>
+<span class="source-line-no">2786</span><span id="line-2786"></span>
+<span class="source-line-no">2787</span><span id="line-2787">  public static ExtendedCell createFirstOnRow(final byte[] row, int roffset, short rlength,</span>
+<span class="source-line-no">2788</span><span id="line-2788">    final byte[] family, int foffset, byte flength, final byte[] col, int coffset, int clength) {</span>
+<span class="source-line-no">2789</span><span id="line-2789">    return new FirstOnRowColCell(row, roffset, rlength, family, foffset, flength, col, coffset,</span>
+<span class="source-line-no">2790</span><span id="line-2790">      clength);</span>
+<span class="source-line-no">2791</span><span id="line-2791">  }</span>
+<span class="source-line-no">2792</span><span id="line-2792"></span>
+<span class="source-line-no">2793</span><span id="line-2793">  public static ExtendedCell createFirstOnRow(final byte[] row) {</span>
+<span class="source-line-no">2794</span><span id="line-2794">    return createFirstOnRow(row, 0, (short) row.length);</span>
+<span class="source-line-no">2795</span><span id="line-2795">  }</span>
+<span class="source-line-no">2796</span><span id="line-2796"></span>
+<span class="source-line-no">2797</span><span id="line-2797">  public static ExtendedCell createFirstOnRowFamily(Cell cell, byte[] fArray, int foff, int flen) {</span>
+<span class="source-line-no">2798</span><span id="line-2798">    if (cell instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">2799</span><span id="line-2799">      return new FirstOnRowColByteBufferExtendedCell(</span>
+<span class="source-line-no">2800</span><span id="line-2800">        ((ByteBufferExtendedCell) cell).getRowByteBuffer(),</span>
+<span class="source-line-no">2801</span><span id="line-2801">        ((ByteBufferExtendedCell) cell).getRowPosition(), cell.getRowLength(),</span>
+<span class="source-line-no">2802</span><span id="line-2802">        ByteBuffer.wrap(fArray), foff, (byte) flen, HConstants.EMPTY_BYTE_BUFFER, 0, 0);</span>
+<span class="source-line-no">2803</span><span id="line-2803">    }</span>
+<span class="source-line-no">2804</span><span id="line-2804">    return new FirstOnRowColCell(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength(),</span>
+<span class="source-line-no">2805</span><span id="line-2805">      fArray, foff, (byte) flen, HConstants.EMPTY_BYTE_ARRAY, 0, 0);</span>
+<span class="source-line-no">2806</span><span id="line-2806">  }</span>
+<span class="source-line-no">2807</span><span id="line-2807"></span>
+<span class="source-line-no">2808</span><span id="line-2808">  public static ExtendedCell createFirstOnRowCol(final Cell cell) {</span>
+<span class="source-line-no">2809</span><span id="line-2809">    if (cell instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">2810</span><span id="line-2810">      return new FirstOnRowColByteBufferExtendedCell(</span>
+<span class="source-line-no">2811</span><span id="line-2811">        ((ByteBufferExtendedCell) cell).getRowByteBuffer(),</span>
+<span class="source-line-no">2812</span><span id="line-2812">        ((ByteBufferExtendedCell) cell).getRowPosition(), cell.getRowLength(),</span>
+<span class="source-line-no">2813</span><span id="line-2813">        HConstants.EMPTY_BYTE_BUFFER, 0, (byte) 0,</span>
+<span class="source-line-no">2814</span><span id="line-2814">        ((ByteBufferExtendedCell) cell).getQualifierByteBuffer(),</span>
+<span class="source-line-no">2815</span><span id="line-2815">        ((ByteBufferExtendedCell) cell).getQualifierPosition(), cell.getQualifierLength());</span>
+<span class="source-line-no">2816</span><span id="line-2816">    }</span>
+<span class="source-line-no">2817</span><span id="line-2817">    return new FirstOnRowColCell(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength(),</span>
+<span class="source-line-no">2818</span><span id="line-2818">      HConstants.EMPTY_BYTE_ARRAY, 0, (byte) 0, cell.getQualifierArray(), cell.getQualifierOffset(),</span>
+<span class="source-line-no">2819</span><span id="line-2819">      cell.getQualifierLength());</span>
+<span class="source-line-no">2820</span><span id="line-2820">  }</span>
+<span class="source-line-no">2821</span><span id="line-2821"></span>
+<span class="source-line-no">2822</span><span id="line-2822">  public static ExtendedCell createFirstOnNextRow(final Cell cell) {</span>
+<span class="source-line-no">2823</span><span id="line-2823">    byte[] nextRow = new byte[cell.getRowLength() + 1];</span>
+<span class="source-line-no">2824</span><span id="line-2824">    CellUtil.copyRowTo(cell, nextRow, 0);</span>
+<span class="source-line-no">2825</span><span id="line-2825">    nextRow[nextRow.length - 1] = 0;// maybe not necessary</span>
+<span class="source-line-no">2826</span><span id="line-2826">    return new FirstOnRowCell(nextRow, 0, (short) nextRow.length);</span>
+<span class="source-line-no">2827</span><span id="line-2827">  }</span>
+<span class="source-line-no">2828</span><span id="line-2828"></span>
+<span class="source-line-no">2829</span><span id="line-2829">  /**</span>
+<span class="source-line-no">2830</span><span id="line-2830">   * Create a Cell that is smaller than all other possible Cells for the given Cell's rk:cf and</span>
+<span class="source-line-no">2831</span><span id="line-2831">   * passed qualifier.</span>
+<span class="source-line-no">2832</span><span id="line-2832">   * @return Last possible Cell on passed Cell's rk:cf and passed qualifier.</span>
+<span class="source-line-no">2833</span><span id="line-2833">   */</span>
+<span class="source-line-no">2834</span><span id="line-2834">  public static ExtendedCell createFirstOnRowCol(final Cell cell, byte[] qArray, int qoffest,</span>
+<span class="source-line-no">2835</span><span id="line-2835">    int qlength) {</span>
+<span class="source-line-no">2836</span><span id="line-2836">    if (cell instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">2837</span><span id="line-2837">      return new FirstOnRowColByteBufferExtendedCell(</span>
+<span class="source-line-no">2838</span><span id="line-2838">        ((ByteBufferExtendedCell) cell).getRowByteBuffer(),</span>
+<span class="source-line-no">2839</span><span id="line-2839">        ((ByteBufferExtendedCell) cell).getRowPosition(), cell.getRowLength(),</span>
+<span class="source-line-no">2840</span><span id="line-2840">        ((ByteBufferExtendedCell) cell).getFamilyByteBuffer(),</span>
+<span class="source-line-no">2841</span><span id="line-2841">        ((ByteBufferExtendedCell) cell).getFamilyPosition(), cell.getFamilyLength(),</span>
+<span class="source-line-no">2842</span><span id="line-2842">        ByteBuffer.wrap(qArray), qoffest, qlength);</span>
+<span class="source-line-no">2843</span><span id="line-2843">    }</span>
+<span class="source-line-no">2844</span><span id="line-2844">    return new FirstOnRowColCell(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength(),</span>
+<span class="source-line-no">2845</span><span id="line-2845">      cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength(), qArray, qoffest,</span>
+<span class="source-line-no">2846</span><span id="line-2846">      qlength);</span>
+<span class="source-line-no">2847</span><span id="line-2847">  }</span>
+<span class="source-line-no">2848</span><span id="line-2848"></span>
+<span class="source-line-no">2849</span><span id="line-2849">  /**</span>
+<span class="source-line-no">2850</span><span id="line-2850">   * Creates the first cell with the row/family/qualifier of this cell and the given timestamp. Uses</span>
+<span class="source-line-no">2851</span><span id="line-2851">   * the "maximum" type that guarantees that the new cell is the lowest possible for this</span>
+<span class="source-line-no">2852</span><span id="line-2852">   * combination of row, family, qualifier, and timestamp. This cell's own timestamp is ignored.</span>
+<span class="source-line-no">2853</span><span id="line-2853">   * @param cell - cell</span>
+<span class="source-line-no">2854</span><span id="line-2854">   */</span>
+<span class="source-line-no">2855</span><span id="line-2855">  public static ExtendedCell createFirstOnRowColTS(Cell cell, long ts) {</span>
+<span class="source-line-no">2856</span><span id="line-2856">    if (cell instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">2857</span><span id="line-2857">      return new FirstOnRowColTSByteBufferExtendedCell(</span>
+<span class="source-line-no">2858</span><span id="line-2858">        ((ByteBufferExtendedCell) cell).getRowByteBuffer(),</span>
+<span class="source-line-no">2859</span><span id="line-2859">        ((ByteBufferExtendedCell) cell).getRowPosition(), cell.getRowLength(),</span>
+<span class="source-line-no">2860</span><span id="line-2860">        ((ByteBufferExtendedCell) cell).getFamilyByteBuffer(),</span>
+<span class="source-line-no">2861</span><span id="line-2861">        ((ByteBufferExtendedCell) cell).getFamilyPosition(), cell.getFamilyLength(),</span>
+<span class="source-line-no">2862</span><span id="line-2862">        ((ByteBufferExtendedCell) cell).getQualifierByteBuffer(),</span>
+<span class="source-line-no">2863</span><span id="line-2863">        ((ByteBufferExtendedCell) cell).getQualifierPosition(), cell.getQualifierLength(), ts);</span>
+<span class="source-line-no">2864</span><span id="line-2864">    }</span>
+<span class="source-line-no">2865</span><span id="line-2865">    return new FirstOnRowColTSCell(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength(),</span>
+<span class="source-line-no">2866</span><span id="line-2866">      cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength(),</span>
+<span class="source-line-no">2867</span><span id="line-2867">      cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength(), ts);</span>
+<span class="source-line-no">2868</span><span id="line-2868">  }</span>
+<span class="source-line-no">2869</span><span id="line-2869"></span>
+<span class="source-line-no">2870</span><span id="line-2870">  /**</span>
+<span class="source-line-no">2871</span><span id="line-2871">   * Create a Cell that is larger than all other possible Cells for the given Cell's row.</span>
+<span class="source-line-no">2872</span><span id="line-2872">   * @return Last possible Cell on passed Cell's row.</span>
+<span class="source-line-no">2873</span><span id="line-2873">   */</span>
+<span class="source-line-no">2874</span><span id="line-2874">  public static ExtendedCell createLastOnRow(final Cell cell) {</span>
+<span class="source-line-no">2875</span><span id="line-2875">    if (cell instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">2876</span><span id="line-2876">      return new LastOnRowByteBufferExtendedCell(((ByteBufferExtendedCell) cell).getRowByteBuffer(),</span>
+<span class="source-line-no">2877</span><span id="line-2877">        ((ByteBufferExtendedCell) cell).getRowPosition(), cell.getRowLength());</span>
+<span class="source-line-no">2878</span><span id="line-2878">    }</span>
+<span class="source-line-no">2879</span><span id="line-2879">    return new LastOnRowCell(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength());</span>
+<span class="source-line-no">2880</span><span id="line-2880">  }</span>
+<span class="source-line-no">2881</span><span id="line-2881"></span>
+<span class="source-line-no">2882</span><span id="line-2882">  public static ExtendedCell createLastOnRow(final byte[] row) {</span>
+<span class="source-line-no">2883</span><span id="line-2883">    return new LastOnRowCell(row, 0, (short) row.length);</span>
+<span class="source-line-no">2884</span><span id="line-2884">  }</span>
+<span class="source-line-no">2885</span><span id="line-2885"></span>
+<span class="source-line-no">2886</span><span id="line-2886">  /**</span>
+<span class="source-line-no">2887</span><span id="line-2887">   * Create a Cell that is larger than all other possible Cells for the given Cell's rk:cf:q. Used</span>
+<span class="source-line-no">2888</span><span id="line-2888">   * in creating "fake keys" for the multi-column Bloom filter optimization to skip the row/column</span>
+<span class="source-line-no">2889</span><span id="line-2889">   * we already know is not in the file.</span>
+<span class="source-line-no">2890</span><span id="line-2890">   * @return Last possible Cell on passed Cell's rk:cf:q.</span>
+<span class="source-line-no">2891</span><span id="line-2891">   */</span>
+<span class="source-line-no">2892</span><span id="line-2892">  public static ExtendedCell createLastOnRowCol(final Cell cell) {</span>
+<span class="source-line-no">2893</span><span id="line-2893">    if (cell instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">2894</span><span id="line-2894">      return new LastOnRowColByteBufferExtendedCell(</span>
+<span class="source-line-no">2895</span><span id="line-2895">        ((ByteBufferExtendedCell) cell).getRowByteBuffer(),</span>
+<span class="source-line-no">2896</span><span id="line-2896">        ((ByteBufferExtendedCell) cell).getRowPosition(), cell.getRowLength(),</span>
+<span class="source-line-no">2897</span><span id="line-2897">        ((ByteBufferExtendedCell) cell).getFamilyByteBuffer(),</span>
+<span class="source-line-no">2898</span><span id="line-2898">        ((ByteBufferExtendedCell) cell).getFamilyPosition(), cell.getFamilyLength(),</span>
+<span class="source-line-no">2899</span><span id="line-2899">        ((ByteBufferExtendedCell) cell).getQualifierByteBuffer(),</span>
+<span class="source-line-no">2900</span><span id="line-2900">        ((ByteBufferExtendedCell) cell).getQualifierPosition(), cell.getQualifierLength());</span>
+<span class="source-line-no">2901</span><span id="line-2901">    }</span>
+<span class="source-line-no">2902</span><span id="line-2902">    return new LastOnRowColCell(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength(),</span>
+<span class="source-line-no">2903</span><span id="line-2903">      cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength(),</span>
+<span class="source-line-no">2904</span><span id="line-2904">      cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength());</span>
+<span class="source-line-no">2905</span><span id="line-2905">  }</span>
+<span class="source-line-no">2906</span><span id="line-2906"></span>
+<span class="source-line-no">2907</span><span id="line-2907">  /**</span>
+<span class="source-line-no">2908</span><span id="line-2908">   * Create a Delete Family Cell for the specified row and family that would be smaller than all</span>
+<span class="source-line-no">2909</span><span id="line-2909">   * other possible Delete Family KeyValues that have the same row and family. Used for seeking.</span>
+<span class="source-line-no">2910</span><span id="line-2910">   * @param row - row key (arbitrary byte array)</span>
+<span class="source-line-no">2911</span><span id="line-2911">   * @param fam - family name</span>
+<span class="source-line-no">2912</span><span id="line-2912">   * @return First Delete Family possible key on passed &lt;code&gt;row&lt;/code&gt;.</span>
+<span class="source-line-no">2913</span><span id="line-2913">   */</span>
+<span class="source-line-no">2914</span><span id="line-2914">  public static ExtendedCell createFirstDeleteFamilyCellOnRow(final byte[] row, final byte[] fam) {</span>
+<span class="source-line-no">2915</span><span id="line-2915">    return new FirstOnRowDeleteFamilyCell(row, fam);</span>
+<span class="source-line-no">2916</span><span id="line-2916">  }</span>
+<span class="source-line-no">2917</span><span id="line-2917"></span>
+<span class="source-line-no">2918</span><span id="line-2918">  /**</span>
+<span class="source-line-no">2919</span><span id="line-2919">   * In fact, in HBase, all {@link Cell}s are {@link ExtendedCell}s. We do not expect users to</span>
+<span class="source-line-no">2920</span><span id="line-2920">   * implement their own {@link Cell} types, except some special projects like Phoenix, where they</span>
+<span class="source-line-no">2921</span><span id="line-2921">   * just use {@link org.apache.hadoop.hbase.KeyValue} and {@link ExtendedCell} directly.</span>
+<span class="source-line-no">2922</span><span id="line-2922">   * @return the original {@code cell} which has already been cast to an {@link ExtendedCell}.</span>
+<span class="source-line-no">2923</span><span id="line-2923">   * @throws IllegalArgumentException if the given {@code cell} is not an {@link ExtendedCell}.</span>
+<span class="source-line-no">2924</span><span id="line-2924">   */</span>
+<span class="source-line-no">2925</span><span id="line-2925">  public static ExtendedCell ensureExtendedCell(Cell cell) {</span>
+<span class="source-line-no">2926</span><span id="line-2926">    if (cell == null) {</span>
+<span class="source-line-no">2927</span><span id="line-2927">      return null;</span>
+<span class="source-line-no">2928</span><span id="line-2928">    }</span>
+<span class="source-line-no">2929</span><span id="line-2929">    Preconditions.checkArgument(cell instanceof ExtendedCell, "Unsupported cell type: %s",</span>
+<span class="source-line-no">2930</span><span id="line-2930">      cell.getClass().getName());</span>
+<span class="source-line-no">2931</span><span id="line-2931">    return (ExtendedCell) cell;</span>
+<span class="source-line-no">2932</span><span id="line-2932">  }</span>
+<span class="source-line-no">2933</span><span id="line-2933"></span>
+<span class="source-line-no">2934</span><span id="line-2934">  public static boolean equals(ExtendedCell a, ExtendedCell b) {</span>
+<span class="source-line-no">2935</span><span id="line-2935">    return CellUtil.matchingRows(a, b) &amp;&amp; CellUtil.matchingFamily(a, b)</span>
+<span class="source-line-no">2936</span><span id="line-2936">      &amp;&amp; CellUtil.matchingQualifier(a, b) &amp;&amp; CellUtil.matchingTimestamp(a, b)</span>
+<span class="source-line-no">2937</span><span id="line-2937">      &amp;&amp; PrivateCellUtil.matchingType(a, b);</span>
+<span class="source-line-no">2938</span><span id="line-2938">  }</span>
+<span class="source-line-no">2939</span><span id="line-2939"></span>
+<span class="source-line-no">2940</span><span id="line-2940">  /** Returns ExtendedCellScanner interface over &lt;code&gt;cellIterables&lt;/code&gt; */</span>
+<span class="source-line-no">2941</span><span id="line-2941">  public static ExtendedCellScanner</span>
+<span class="source-line-no">2942</span><span id="line-2942">    createExtendedCellScanner(final List&lt;? extends ExtendedCellScannable&gt; cellScannerables) {</span>
+<span class="source-line-no">2943</span><span id="line-2943">    return new ExtendedCellScanner() {</span>
+<span class="source-line-no">2944</span><span id="line-2944">      private final Iterator&lt;? extends ExtendedCellScannable&gt; iterator =</span>
+<span class="source-line-no">2945</span><span id="line-2945">        cellScannerables.iterator();</span>
+<span class="source-line-no">2946</span><span id="line-2946">      private ExtendedCellScanner cellScanner = null;</span>
+<span class="source-line-no">2947</span><span id="line-2947"></span>
+<span class="source-line-no">2948</span><span id="line-2948">      @Override</span>
+<span class="source-line-no">2949</span><span id="line-2949">      public ExtendedCell current() {</span>
+<span class="source-line-no">2950</span><span id="line-2950">        return this.cellScanner != null ? this.cellScanner.current() : null;</span>
+<span class="source-line-no">2951</span><span id="line-2951">      }</span>
+<span class="source-line-no">2952</span><span id="line-2952"></span>
+<span class="source-line-no">2953</span><span id="line-2953">      @Override</span>
+<span class="source-line-no">2954</span><span id="line-2954">      public boolean advance() throws IOException {</span>
+<span class="source-line-no">2955</span><span id="line-2955">        while (true) {</span>
+<span class="source-line-no">2956</span><span id="line-2956">          if (this.cellScanner == null) {</span>
+<span class="source-line-no">2957</span><span id="line-2957">            if (!this.iterator.hasNext()) {</span>
+<span class="source-line-no">2958</span><span id="line-2958">              return false;</span>
+<span class="source-line-no">2959</span><span id="line-2959">            }</span>
+<span class="source-line-no">2960</span><span id="line-2960">            this.cellScanner = this.iterator.next().cellScanner();</span>
+<span class="source-line-no">2961</span><span id="line-2961">          }</span>
+<span class="source-line-no">2962</span><span id="line-2962">          if (this.cellScanner.advance()) {</span>
+<span class="source-line-no">2963</span><span id="line-2963">            return true;</span>
+<span class="source-line-no">2964</span><span id="line-2964">          }</span>
+<span class="source-line-no">2965</span><span id="line-2965">          this.cellScanner = null;</span>
+<span class="source-line-no">2966</span><span id="line-2966">        }</span>
+<span class="source-line-no">2967</span><span id="line-2967">      }</span>
+<span class="source-line-no">2968</span><span id="line-2968">    };</span>
+<span class="source-line-no">2969</span><span id="line-2969">  }</span>
+<span class="source-line-no">2970</span><span id="line-2970"></span>
+<span class="source-line-no">2971</span><span id="line-2971">  /**</span>
+<span class="source-line-no">2972</span><span id="line-2972">   * Flatten the map of cells out under the ExtendedCellScanner</span>
+<span class="source-line-no">2973</span><span id="line-2973">   * @param map Map of Cell Lists; for example, the map of families to ExtendedCells that is used</span>
+<span class="source-line-no">2974</span><span id="line-2974">   *            inside Put, etc., keeping Cells organized by family.</span>
+<span class="source-line-no">2975</span><span id="line-2975">   * @return ExtendedCellScanner interface over &lt;code&gt;cellIterable&lt;/code&gt;</span>
+<span class="source-line-no">2976</span><span id="line-2976">   */</span>
+<span class="source-line-no">2977</span><span id="line-2977">  public static ExtendedCellScanner</span>
+<span class="source-line-no">2978</span><span id="line-2978">    createExtendedCellScanner(final NavigableMap&lt;byte[], List&lt;ExtendedCell&gt;&gt; map) {</span>
+<span class="source-line-no">2979</span><span id="line-2979">    return new ExtendedCellScanner() {</span>
+<span class="source-line-no">2980</span><span id="line-2980">      private final Iterator&lt;Entry&lt;byte[], List&lt;ExtendedCell&gt;&gt;&gt; entries = map.entrySet().iterator();</span>
+<span class="source-line-no">2981</span><span id="line-2981">      private Iterator&lt;ExtendedCell&gt; currentIterator = null;</span>
+<span class="source-line-no">2982</span><span id="line-2982">      private ExtendedCell currentCell;</span>
+<span class="source-line-no">2983</span><span id="line-2983"></span>
+<span class="source-line-no">2984</span><span id="line-2984">      @Override</span>
+<span class="source-line-no">2985</span><span id="line-2985">      public ExtendedCell current() {</span>
+<span class="source-line-no">2986</span><span id="line-2986">        return this.currentCell;</span>
+<span class="source-line-no">2987</span><span id="line-2987">      }</span>
+<span class="source-line-no">2988</span><span id="line-2988"></span>
+<span class="source-line-no">2989</span><span id="line-2989">      @Override</span>
+<span class="source-line-no">2990</span><span id="line-2990">      public boolean advance() {</span>
+<span class="source-line-no">2991</span><span id="line-2991">        while (true) {</span>
+<span class="source-line-no">2992</span><span id="line-2992">          if (this.currentIterator == null) {</span>
+<span class="source-line-no">2993</span><span id="line-2993">            if (!this.entries.hasNext()) {</span>
+<span class="source-line-no">2994</span><span id="line-2994">              return false;</span>
+<span class="source-line-no">2995</span><span id="line-2995">            }</span>
+<span class="source-line-no">2996</span><span id="line-2996">            this.currentIterator = this.entries.next().getValue().iterator();</span>
+<span class="source-line-no">2997</span><span id="line-2997">          }</span>
+<span class="source-line-no">2998</span><span id="line-2998">          if (this.currentIterator.hasNext()) {</span>
+<span class="source-line-no">2999</span><span id="line-2999">            this.currentCell = this.currentIterator.next();</span>
+<span class="source-line-no">3000</span><span id="line-3000">            return true;</span>
+<span class="source-line-no">3001</span><span id="line-3001">          }</span>
+<span class="source-line-no">3002</span><span id="line-3002">          this.currentCell = null;</span>
+<span class="source-line-no">3003</span><span id="line-3003">          this.currentIterator = null;</span>
+<span class="source-line-no">3004</span><span id="line-3004">        }</span>
+<span class="source-line-no">3005</span><span id="line-3005">      }</span>
+<span class="source-line-no">3006</span><span id="line-3006">    };</span>
+<span class="source-line-no">3007</span><span id="line-3007">  }</span>
+<span class="source-line-no">3008</span><span id="line-3008"></span>
+<span class="source-line-no">3009</span><span id="line-3009">  /** Returns CellScanner interface over &lt;code&gt;cellArray&lt;/code&gt; */</span>
+<span class="source-line-no">3010</span><span id="line-3010">  public static ExtendedCellScanner createExtendedCellScanner(final ExtendedCell[] cellArray) {</span>
+<span class="source-line-no">3011</span><span id="line-3011">    return new ExtendedCellScanner() {</span>
+<span class="source-line-no">3012</span><span id="line-3012">      private final ExtendedCell[] cells = cellArray;</span>
+<span class="source-line-no">3013</span><span id="line-3013">      private int index = -1;</span>
+<span class="source-line-no">3014</span><span id="line-3014"></span>
+<span class="source-line-no">3015</span><span id="line-3015">      @Override</span>
+<span class="source-line-no">3016</span><span id="line-3016">      public ExtendedCell current() {</span>
+<span class="source-line-no">3017</span><span id="line-3017">        if (cells == null) {</span>
+<span class="source-line-no">3018</span><span id="line-3018">          return null;</span>
+<span class="source-line-no">3019</span><span id="line-3019">        }</span>
+<span class="source-line-no">3020</span><span id="line-3020">        return (index &lt; 0) ? null : this.cells[index];</span>
+<span class="source-line-no">3021</span><span id="line-3021">      }</span>
+<span class="source-line-no">3022</span><span id="line-3022"></span>
+<span class="source-line-no">3023</span><span id="line-3023">      @Override</span>
+<span class="source-line-no">3024</span><span id="line-3024">      public boolean advance() {</span>
+<span class="source-line-no">3025</span><span id="line-3025">        if (cells == null) {</span>
+<span class="source-line-no">3026</span><span id="line-3026">          return false;</span>
+<span class="source-line-no">3027</span><span id="line-3027">        }</span>
+<span class="source-line-no">3028</span><span id="line-3028">        return ++index &lt; this.cells.length;</span>
+<span class="source-line-no">3029</span><span id="line-3029">      }</span>
+<span class="source-line-no">3030</span><span id="line-3030">    };</span>
+<span class="source-line-no">3031</span><span id="line-3031">  }</span>
+<span class="source-line-no">3032</span><span id="line-3032"></span>
+<span class="source-line-no">3033</span><span id="line-3033">  /** Returns ExtendedCellScanner interface over &lt;code&gt;cellIterable&lt;/code&gt; */</span>
+<span class="source-line-no">3034</span><span id="line-3034">  public static ExtendedCellScanner</span>
+<span class="source-line-no">3035</span><span id="line-3035">    createExtendedCellScanner(final Iterable&lt;ExtendedCell&gt; cellIterable) {</span>
+<span class="source-line-no">3036</span><span id="line-3036">    if (cellIterable == null) {</span>
+<span class="source-line-no">3037</span><span id="line-3037">      return null;</span>
+<span class="source-line-no">3038</span><span id="line-3038">    }</span>
+<span class="source-line-no">3039</span><span id="line-3039">    return createExtendedCellScanner(cellIterable.iterator());</span>
+<span class="source-line-no">3040</span><span id="line-3040">  }</span>
+<span class="source-line-no">3041</span><span id="line-3041"></span>
+<span class="source-line-no">3042</span><span id="line-3042">  /**</span>
+<span class="source-line-no">3043</span><span id="line-3043">   * Returns ExtendedCellScanner interface over &lt;code&gt;cellIterable&lt;/code&gt; or null if</span>
+<span class="source-line-no">3044</span><span id="line-3044">   * &lt;code&gt;cells&lt;/code&gt; is null</span>
+<span class="source-line-no">3045</span><span id="line-3045">   */</span>
+<span class="source-line-no">3046</span><span id="line-3046">  public static ExtendedCellScanner createExtendedCellScanner(final Iterator&lt;ExtendedCell&gt; cells) {</span>
+<span class="source-line-no">3047</span><span id="line-3047">    if (cells == null) {</span>
+<span class="source-line-no">3048</span><span id="line-3048">      return null;</span>
+<span class="source-line-no">3049</span><span id="line-3049">    }</span>
+<span class="source-line-no">3050</span><span id="line-3050">    return new ExtendedCellScanner() {</span>
+<span class="source-line-no">3051</span><span id="line-3051">      private final Iterator&lt;ExtendedCell&gt; iterator = cells;</span>
+<span class="source-line-no">3052</span><span id="line-3052">      private ExtendedCell current = null;</span>
+<span class="source-line-no">3053</span><span id="line-3053"></span>
+<span class="source-line-no">3054</span><span id="line-3054">      @Override</span>
+<span class="source-line-no">3055</span><span id="line-3055">      public ExtendedCell current() {</span>
+<span class="source-line-no">3056</span><span id="line-3056">        return this.current;</span>
+<span class="source-line-no">3057</span><span id="line-3057">      }</span>
+<span class="source-line-no">3058</span><span id="line-3058"></span>
+<span class="source-line-no">3059</span><span id="line-3059">      @Override</span>
+<span class="source-line-no">3060</span><span id="line-3060">      public boolean advance() {</span>
+<span class="source-line-no">3061</span><span id="line-3061">        boolean hasNext = this.iterator.hasNext();</span>
+<span class="source-line-no">3062</span><span id="line-3062">        this.current = hasNext ? this.iterator.next() : null;</span>
+<span class="source-line-no">3063</span><span id="line-3063">        return hasNext;</span>
+<span class="source-line-no">3064</span><span id="line-3064">      }</span>
+<span class="source-line-no">3065</span><span id="line-3065">    };</span>
+<span class="source-line-no">3066</span><span id="line-3066">  }</span>
+<span class="source-line-no">3067</span><span id="line-3067"></span>
+<span class="source-line-no">3068</span><span id="line-3068">  private static final Cell.Type[] CELL_TYPE_CODE_ARRAY = new Cell.Type[256];</span>
+<span class="source-line-no">3069</span><span id="line-3069"></span>
+<span class="source-line-no">3070</span><span id="line-3070">  static {</span>
+<span class="source-line-no">3071</span><span id="line-3071">    for (Cell.Type t : Cell.Type.values()) {</span>
+<span class="source-line-no">3072</span><span id="line-3072">      CELL_TYPE_CODE_ARRAY[t.getCode() &amp; 0xff] = t;</span>
+<span class="source-line-no">3073</span><span id="line-3073">    }</span>
+<span class="source-line-no">3074</span><span id="line-3074">  }</span>
+<span class="source-line-no">3075</span><span id="line-3075"></span>
+<span class="source-line-no">3076</span><span id="line-3076">  public static Cell.Type code2Type(byte code) {</span>
+<span class="source-line-no">3077</span><span id="line-3077">    Cell.Type t = CELL_TYPE_CODE_ARRAY[code &amp; 0xff];</span>
+<span class="source-line-no">3078</span><span id="line-3078">    if (t != null) {</span>
+<span class="source-line-no">3079</span><span id="line-3079">      return t;</span>
+<span class="source-line-no">3080</span><span id="line-3080">    }</span>
+<span class="source-line-no">3081</span><span id="line-3081">    throw new UnsupportedOperationException("Invalid type of cell " + code);</span>
+<span class="source-line-no">3082</span><span id="line-3082">  }</span>
+<span class="source-line-no">3083</span><span id="line-3083"></span>
+<span class="source-line-no">3084</span><span id="line-3084">  public static byte getTypeByte(Cell c) {</span>
+<span class="source-line-no">3085</span><span id="line-3085">    if (c instanceof ExtendedCell) {</span>
+<span class="source-line-no">3086</span><span id="line-3086">      return ((ExtendedCell) c).getTypeByte();</span>
+<span class="source-line-no">3087</span><span id="line-3087">    } else {</span>
+<span class="source-line-no">3088</span><span id="line-3088">      return c.getType().getCode();</span>
+<span class="source-line-no">3089</span><span id="line-3089">    }</span>
+<span class="source-line-no">3090</span><span id="line-3090">  }</span>
+<span class="source-line-no">3091</span><span id="line-3091"></span>
+<span class="source-line-no">3092</span><span id="line-3092">  public static long getSequenceId(Cell c) {</span>
+<span class="source-line-no">3093</span><span id="line-3093">    if (c instanceof ExtendedCell) {</span>
+<span class="source-line-no">3094</span><span id="line-3094">      return ((ExtendedCell) c).getSequenceId();</span>
+<span class="source-line-no">3095</span><span id="line-3095">    } else {</span>
+<span class="source-line-no">3096</span><span id="line-3096">      return HConstants.NO_SEQNUM;</span>
+<span class="source-line-no">3097</span><span id="line-3097">    }</span>
+<span class="source-line-no">3098</span><span id="line-3098">  }</span>
+<span class="source-line-no">3099</span><span id="line-3099"></span>
+<span class="source-line-no">3100</span><span id="line-3100">  public static byte[] increaseLastNonMaxByte(byte[] bytes) {</span>
+<span class="source-line-no">3101</span><span id="line-3101">    byte[] result = Arrays.copyOf(bytes, bytes.length);</span>
+<span class="source-line-no">3102</span><span id="line-3102">    for (int i = bytes.length - 1; i &gt;= 0; i--) {</span>
+<span class="source-line-no">3103</span><span id="line-3103">      byte b = bytes[i];</span>
+<span class="source-line-no">3104</span><span id="line-3104">      if (b &lt; Byte.MAX_VALUE) {</span>
+<span class="source-line-no">3105</span><span id="line-3105">        result[i] = (byte) (b + 1);</span>
+<span class="source-line-no">3106</span><span id="line-3106">        break;</span>
+<span class="source-line-no">3107</span><span id="line-3107">      }</span>
+<span class="source-line-no">3108</span><span id="line-3108">    }</span>
+<span class="source-line-no">3109</span><span id="line-3109">    return result;</span>
+<span class="source-line-no">3110</span><span id="line-3110">  }</span>
+<span class="source-line-no">3111</span><span id="line-3111">}</span>
 
 
 
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/filter/FuzzyRowFilter.html b/apidocs/src-html/org/apache/hadoop/hbase/filter/FuzzyRowFilter.html
index 6085bfe06f6..85fac9cf65c 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/filter/FuzzyRowFilter.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/filter/FuzzyRowFilter.html
@@ -80,7 +80,7 @@
 <span class="source-line-no">067</span><span id="line-67">@InterfaceAudience.Public</span>
 <span class="source-line-no">068</span><span id="line-68">public class FuzzyRowFilter extends FilterBase implements HintingFilter {</span>
 <span class="source-line-no">069</span><span id="line-69">  private static final boolean UNSAFE_UNALIGNED = HBasePlatformDependent.unaligned();</span>
-<span class="source-line-no">070</span><span id="line-70">  private List&lt;Pair&lt;byte[], byte[]&gt;&gt; fuzzyKeysData;</span>
+<span class="source-line-no">070</span><span id="line-70">  private final List&lt;Pair&lt;byte[], byte[]&gt;&gt; fuzzyKeysData;</span>
 <span class="source-line-no">071</span><span id="line-71">  // Used to record whether we want to skip the current row.</span>
 <span class="source-line-no">072</span><span id="line-72">  // Usually we should use filterRowKey here but in the current scan implementation, if filterRowKey</span>
 <span class="source-line-no">073</span><span id="line-73">  // returns true, we will just skip to next row, instead of calling getNextCellHint to determine</span>
@@ -102,7 +102,7 @@
 <span class="source-line-no">089</span><span id="line-89">  /**</span>
 <span class="source-line-no">090</span><span id="line-90">   * Row tracker (keeps all next rows after SEEK_NEXT_USING_HINT was returned)</span>
 <span class="source-line-no">091</span><span id="line-91">   */</span>
-<span class="source-line-no">092</span><span id="line-92">  private RowTracker tracker;</span>
+<span class="source-line-no">092</span><span id="line-92">  private final RowTracker tracker;</span>
 <span class="source-line-no">093</span><span id="line-93"></span>
 <span class="source-line-no">094</span><span id="line-94">  public FuzzyRowFilter(List&lt;Pair&lt;byte[], byte[]&gt;&gt; fuzzyKeysData) {</span>
 <span class="source-line-no">095</span><span id="line-95">    List&lt;Pair&lt;byte[], byte[]&gt;&gt; fuzzyKeyDataCopy = new ArrayList&lt;&gt;(fuzzyKeysData.size());</span>
@@ -213,7 +213,7 @@
 <span class="source-line-no">200</span><span id="line-200"></span>
 <span class="source-line-no">201</span><span id="line-201">  @Override</span>
 <span class="source-line-no">202</span><span id="line-202">  public ReturnCode filterCell(final Cell c) {</span>
-<span class="source-line-no">203</span><span id="line-203">    final int startIndex = lastFoundIndex &gt;= 0 ? lastFoundIndex : 0;</span>
+<span class="source-line-no">203</span><span id="line-203">    final int startIndex = Math.max(lastFoundIndex, 0);</span>
 <span class="source-line-no">204</span><span id="line-204">    final int size = fuzzyKeysData.size();</span>
 <span class="source-line-no">205</span><span id="line-205">    for (int i = startIndex; i &lt; size + startIndex; i++) {</span>
 <span class="source-line-no">206</span><span id="line-206">      final int index = i % size;</span>
@@ -239,7 +239,7 @@
 <span class="source-line-no">226</span><span id="line-226">  @Override</span>
 <span class="source-line-no">227</span><span id="line-227">  public Cell getNextCellHint(Cell currentCell) {</span>
 <span class="source-line-no">228</span><span id="line-228">    boolean result = tracker.updateTracker(currentCell);</span>
-<span class="source-line-no">229</span><span id="line-229">    if (result == false) {</span>
+<span class="source-line-no">229</span><span id="line-229">    if (!result) {</span>
 <span class="source-line-no">230</span><span id="line-230">      done = true;</span>
 <span class="source-line-no">231</span><span id="line-231">      return null;</span>
 <span class="source-line-no">232</span><span id="line-232">    }</span>
@@ -587,128 +587,139 @@
 <span class="source-line-no">574</span><span id="line-574">  }</span>
 <span class="source-line-no">575</span><span id="line-575"></span>
 <span class="source-line-no">576</span><span id="line-576">  /**</span>
-<span class="source-line-no">577</span><span id="line-577">   * @return greater byte array than given (row) which satisfies the fuzzy rule if it exists, null</span>
-<span class="source-line-no">578</span><span id="line-578">   *         otherwise</span>
-<span class="source-line-no">579</span><span id="line-579">   */</span>
-<span class="source-line-no">580</span><span id="line-580">  static byte[] getNextForFuzzyRule(boolean reverse, byte[] row, int offset, int length,</span>
-<span class="source-line-no">581</span><span id="line-581">    byte[] fuzzyKeyBytes, byte[] fuzzyKeyMeta) {</span>
-<span class="source-line-no">582</span><span id="line-582">    // To find out the next "smallest" byte array that satisfies fuzzy rule and "greater" than</span>
-<span class="source-line-no">583</span><span id="line-583">    // the given one we do the following:</span>
-<span class="source-line-no">584</span><span id="line-584">    // 1. setting values on all "fixed" positions to the values from fuzzyKeyBytes</span>
-<span class="source-line-no">585</span><span id="line-585">    // 2. if during the first step given row did not increase, then we increase the value at</span>
-<span class="source-line-no">586</span><span id="line-586">    // the first "non-fixed" position (where it is not maximum already)</span>
-<span class="source-line-no">587</span><span id="line-587"></span>
-<span class="source-line-no">588</span><span id="line-588">    // It is easier to perform this by using fuzzyKeyBytes copy and setting "non-fixed" position</span>
-<span class="source-line-no">589</span><span id="line-589">    // values than otherwise.</span>
-<span class="source-line-no">590</span><span id="line-590">    byte[] result =</span>
-<span class="source-line-no">591</span><span id="line-591">      Arrays.copyOf(fuzzyKeyBytes, length &gt; fuzzyKeyBytes.length ? length : fuzzyKeyBytes.length);</span>
-<span class="source-line-no">592</span><span id="line-592">    if (reverse &amp;&amp; length &gt; fuzzyKeyBytes.length) {</span>
-<span class="source-line-no">593</span><span id="line-593">      // we need trailing 0xff's instead of trailing 0x00's</span>
-<span class="source-line-no">594</span><span id="line-594">      for (int i = fuzzyKeyBytes.length; i &lt; result.length; i++) {</span>
-<span class="source-line-no">595</span><span id="line-595">        result[i] = (byte) 0xFF;</span>
-<span class="source-line-no">596</span><span id="line-596">      }</span>
-<span class="source-line-no">597</span><span id="line-597">    }</span>
-<span class="source-line-no">598</span><span id="line-598">    int toInc = -1;</span>
-<span class="source-line-no">599</span><span id="line-599">    final Order order = Order.orderFor(reverse);</span>
-<span class="source-line-no">600</span><span id="line-600"></span>
-<span class="source-line-no">601</span><span id="line-601">    boolean increased = false;</span>
-<span class="source-line-no">602</span><span id="line-602">    for (int i = 0; i &lt; result.length; i++) {</span>
-<span class="source-line-no">603</span><span id="line-603">      if (i &gt;= fuzzyKeyMeta.length || fuzzyKeyMeta[i] == 0 /* non-fixed */) {</span>
-<span class="source-line-no">604</span><span id="line-604">        result[i] = row[offset + i];</span>
-<span class="source-line-no">605</span><span id="line-605">        if (!order.isMax(row[offset + i])) {</span>
-<span class="source-line-no">606</span><span id="line-606">          // this is "non-fixed" position and is not at max value, hence we can increase it</span>
-<span class="source-line-no">607</span><span id="line-607">          toInc = i;</span>
-<span class="source-line-no">608</span><span id="line-608">        }</span>
-<span class="source-line-no">609</span><span id="line-609">      } else if (i &lt; fuzzyKeyMeta.length &amp;&amp; fuzzyKeyMeta[i] == -1 /* fixed */) {</span>
-<span class="source-line-no">610</span><span id="line-610">        if (order.lt((row[i + offset] &amp; 0xFF), (fuzzyKeyBytes[i] &amp; 0xFF))) {</span>
-<span class="source-line-no">611</span><span id="line-611">          // if setting value for any fixed position increased the original array,</span>
-<span class="source-line-no">612</span><span id="line-612">          // we are OK</span>
-<span class="source-line-no">613</span><span id="line-613">          increased = true;</span>
-<span class="source-line-no">614</span><span id="line-614">          break;</span>
-<span class="source-line-no">615</span><span id="line-615">        }</span>
-<span class="source-line-no">616</span><span id="line-616"></span>
-<span class="source-line-no">617</span><span id="line-617">        if (order.gt((row[i + offset] &amp; 0xFF), (fuzzyKeyBytes[i] &amp; 0xFF))) {</span>
-<span class="source-line-no">618</span><span id="line-618">          // if setting value for any fixed position makes array "smaller", then just stop:</span>
-<span class="source-line-no">619</span><span id="line-619">          // in case we found some non-fixed position to increase we will do it, otherwise</span>
-<span class="source-line-no">620</span><span id="line-620">          // there's no "next" row key that satisfies fuzzy rule and "greater" than given row</span>
-<span class="source-line-no">621</span><span id="line-621">          break;</span>
-<span class="source-line-no">622</span><span id="line-622">        }</span>
-<span class="source-line-no">623</span><span id="line-623">      }</span>
-<span class="source-line-no">624</span><span id="line-624">    }</span>
-<span class="source-line-no">625</span><span id="line-625"></span>
-<span class="source-line-no">626</span><span id="line-626">    if (!increased) {</span>
-<span class="source-line-no">627</span><span id="line-627">      if (toInc &lt; 0) {</span>
-<span class="source-line-no">628</span><span id="line-628">        return null;</span>
-<span class="source-line-no">629</span><span id="line-629">      }</span>
-<span class="source-line-no">630</span><span id="line-630">      result[toInc] = order.inc(result[toInc]);</span>
-<span class="source-line-no">631</span><span id="line-631"></span>
-<span class="source-line-no">632</span><span id="line-632">      // Setting all "non-fixed" positions to zeroes to the right of the one we increased so</span>
-<span class="source-line-no">633</span><span id="line-633">      // that found "next" row key is the smallest possible</span>
-<span class="source-line-no">634</span><span id="line-634">      for (int i = toInc + 1; i &lt; result.length; i++) {</span>
-<span class="source-line-no">635</span><span id="line-635">        if (i &gt;= fuzzyKeyMeta.length || fuzzyKeyMeta[i] == 0 /* non-fixed */) {</span>
-<span class="source-line-no">636</span><span id="line-636">          result[i] = order.min();</span>
-<span class="source-line-no">637</span><span id="line-637">        }</span>
-<span class="source-line-no">638</span><span id="line-638">      }</span>
-<span class="source-line-no">639</span><span id="line-639">    }</span>
-<span class="source-line-no">640</span><span id="line-640"></span>
-<span class="source-line-no">641</span><span id="line-641">    return reverse ? result : trimTrailingZeroes(result, fuzzyKeyMeta, toInc);</span>
-<span class="source-line-no">642</span><span id="line-642">  }</span>
-<span class="source-line-no">643</span><span id="line-643"></span>
-<span class="source-line-no">644</span><span id="line-644">  /**</span>
-<span class="source-line-no">645</span><span id="line-645">   * For forward scanner, next cell hint should not contain any trailing zeroes unless they are part</span>
-<span class="source-line-no">646</span><span id="line-646">   * of fuzzyKeyMeta hint = '\x01\x01\x01\x00\x00' will skip valid row '\x01\x01\x01'</span>
-<span class="source-line-no">647</span><span id="line-647">   * @param toInc - position of incremented byte</span>
-<span class="source-line-no">648</span><span id="line-648">   * @return trimmed version of result</span>
-<span class="source-line-no">649</span><span id="line-649">   */</span>
-<span class="source-line-no">650</span><span id="line-650"></span>
-<span class="source-line-no">651</span><span id="line-651">  private static byte[] trimTrailingZeroes(byte[] result, byte[] fuzzyKeyMeta, int toInc) {</span>
-<span class="source-line-no">652</span><span id="line-652">    int off = fuzzyKeyMeta.length &gt;= result.length ? result.length - 1 : fuzzyKeyMeta.length - 1;</span>
-<span class="source-line-no">653</span><span id="line-653">    for (; off &gt;= 0; off--) {</span>
-<span class="source-line-no">654</span><span id="line-654">      if (fuzzyKeyMeta[off] != 0) break;</span>
-<span class="source-line-no">655</span><span id="line-655">    }</span>
-<span class="source-line-no">656</span><span id="line-656">    if (off &lt; toInc) off = toInc;</span>
-<span class="source-line-no">657</span><span id="line-657">    byte[] retValue = new byte[off + 1];</span>
-<span class="source-line-no">658</span><span id="line-658">    System.arraycopy(result, 0, retValue, 0, retValue.length);</span>
-<span class="source-line-no">659</span><span id="line-659">    return retValue;</span>
-<span class="source-line-no">660</span><span id="line-660">  }</span>
+<span class="source-line-no">577</span><span id="line-577">   * Find out the closes next byte array that satisfies fuzzy rule and is after the given one. In</span>
+<span class="source-line-no">578</span><span id="line-578">   * the reverse case it returns increased byte array to make sure that the proper row is selected</span>
+<span class="source-line-no">579</span><span id="line-579">   * next.</span>
+<span class="source-line-no">580</span><span id="line-580">   * @return byte array which is after the given row and which satisfies the fuzzy rule if it</span>
+<span class="source-line-no">581</span><span id="line-581">   *         exists, null otherwise</span>
+<span class="source-line-no">582</span><span id="line-582">   */</span>
+<span class="source-line-no">583</span><span id="line-583">  static byte[] getNextForFuzzyRule(boolean reverse, byte[] row, int offset, int length,</span>
+<span class="source-line-no">584</span><span id="line-584">    byte[] fuzzyKeyBytes, byte[] fuzzyKeyMeta) {</span>
+<span class="source-line-no">585</span><span id="line-585">    // To find out the closest next byte array that satisfies fuzzy rule and is after the given one</span>
+<span class="source-line-no">586</span><span id="line-586">    // we do the following:</span>
+<span class="source-line-no">587</span><span id="line-587">    // 1. setting values on all "fixed" positions to the values from fuzzyKeyBytes</span>
+<span class="source-line-no">588</span><span id="line-588">    // 2. if during the first step given row did not increase, then we increase the value at</span>
+<span class="source-line-no">589</span><span id="line-589">    // the first "non-fixed" position (where it is not maximum already)</span>
+<span class="source-line-no">590</span><span id="line-590"></span>
+<span class="source-line-no">591</span><span id="line-591">    // It is easier to perform this by using fuzzyKeyBytes copy and setting "non-fixed" position</span>
+<span class="source-line-no">592</span><span id="line-592">    // values than otherwise.</span>
+<span class="source-line-no">593</span><span id="line-593">    byte[] result = Arrays.copyOf(fuzzyKeyBytes, Math.max(length, fuzzyKeyBytes.length));</span>
+<span class="source-line-no">594</span><span id="line-594">    if (reverse) {</span>
+<span class="source-line-no">595</span><span id="line-595">      // we need 0xff's instead of 0x00's</span>
+<span class="source-line-no">596</span><span id="line-596">      for (int i = 0; i &lt; result.length; i++) {</span>
+<span class="source-line-no">597</span><span id="line-597">        if (result[i] == 0) {</span>
+<span class="source-line-no">598</span><span id="line-598">          result[i] = (byte) 0xFF;</span>
+<span class="source-line-no">599</span><span id="line-599">        }</span>
+<span class="source-line-no">600</span><span id="line-600">      }</span>
+<span class="source-line-no">601</span><span id="line-601">    }</span>
+<span class="source-line-no">602</span><span id="line-602">    int toInc = -1;</span>
+<span class="source-line-no">603</span><span id="line-603">    final Order order = Order.orderFor(reverse);</span>
+<span class="source-line-no">604</span><span id="line-604"></span>
+<span class="source-line-no">605</span><span id="line-605">    boolean increased = false;</span>
+<span class="source-line-no">606</span><span id="line-606">    for (int i = 0; i &lt; result.length; i++) {</span>
+<span class="source-line-no">607</span><span id="line-607">      if (i &gt;= fuzzyKeyMeta.length || fuzzyKeyMeta[i] == 0 /* non-fixed */) {</span>
+<span class="source-line-no">608</span><span id="line-608">        result[i] = row[offset + i];</span>
+<span class="source-line-no">609</span><span id="line-609">        if (!order.isMax(row[offset + i])) {</span>
+<span class="source-line-no">610</span><span id="line-610">          // this is "non-fixed" position and is not at max value, hence we can increase it</span>
+<span class="source-line-no">611</span><span id="line-611">          toInc = i;</span>
+<span class="source-line-no">612</span><span id="line-612">        }</span>
+<span class="source-line-no">613</span><span id="line-613">      } else if (i &lt; fuzzyKeyMeta.length &amp;&amp; fuzzyKeyMeta[i] == -1 /* fixed */) {</span>
+<span class="source-line-no">614</span><span id="line-614">        if (order.lt((row[i + offset] &amp; 0xFF), (fuzzyKeyBytes[i] &amp; 0xFF))) {</span>
+<span class="source-line-no">615</span><span id="line-615">          // if setting value for any fixed position increased the original array,</span>
+<span class="source-line-no">616</span><span id="line-616">          // we are OK</span>
+<span class="source-line-no">617</span><span id="line-617">          increased = true;</span>
+<span class="source-line-no">618</span><span id="line-618">          break;</span>
+<span class="source-line-no">619</span><span id="line-619">        }</span>
+<span class="source-line-no">620</span><span id="line-620"></span>
+<span class="source-line-no">621</span><span id="line-621">        if (order.gt((row[i + offset] &amp; 0xFF), (fuzzyKeyBytes[i] &amp; 0xFF))) {</span>
+<span class="source-line-no">622</span><span id="line-622">          // if setting value for any fixed position makes array "smaller", then just stop:</span>
+<span class="source-line-no">623</span><span id="line-623">          // in case we found some non-fixed position to increase we will do it, otherwise</span>
+<span class="source-line-no">624</span><span id="line-624">          // there's no "next" row key that satisfies fuzzy rule and "greater" than given row</span>
+<span class="source-line-no">625</span><span id="line-625">          break;</span>
+<span class="source-line-no">626</span><span id="line-626">        }</span>
+<span class="source-line-no">627</span><span id="line-627">      }</span>
+<span class="source-line-no">628</span><span id="line-628">    }</span>
+<span class="source-line-no">629</span><span id="line-629"></span>
+<span class="source-line-no">630</span><span id="line-630">    if (!increased) {</span>
+<span class="source-line-no">631</span><span id="line-631">      if (toInc &lt; 0) {</span>
+<span class="source-line-no">632</span><span id="line-632">        return null;</span>
+<span class="source-line-no">633</span><span id="line-633">      }</span>
+<span class="source-line-no">634</span><span id="line-634">      result[toInc] = order.inc(result[toInc]);</span>
+<span class="source-line-no">635</span><span id="line-635"></span>
+<span class="source-line-no">636</span><span id="line-636">      // Setting all "non-fixed" positions to zeroes to the right of the one we increased so</span>
+<span class="source-line-no">637</span><span id="line-637">      // that found "next" row key is the smallest possible</span>
+<span class="source-line-no">638</span><span id="line-638">      for (int i = toInc + 1; i &lt; result.length; i++) {</span>
+<span class="source-line-no">639</span><span id="line-639">        if (i &gt;= fuzzyKeyMeta.length || fuzzyKeyMeta[i] == 0 /* non-fixed */) {</span>
+<span class="source-line-no">640</span><span id="line-640">          result[i] = order.min();</span>
+<span class="source-line-no">641</span><span id="line-641">        }</span>
+<span class="source-line-no">642</span><span id="line-642">      }</span>
+<span class="source-line-no">643</span><span id="line-643">    }</span>
+<span class="source-line-no">644</span><span id="line-644"></span>
+<span class="source-line-no">645</span><span id="line-645">    byte[] trailingZerosTrimmed = trimTrailingZeroes(result, fuzzyKeyMeta, toInc);</span>
+<span class="source-line-no">646</span><span id="line-646">    if (reverse) {</span>
+<span class="source-line-no">647</span><span id="line-647">      // In the reverse case we increase last non-max byte to make sure that the proper row is</span>
+<span class="source-line-no">648</span><span id="line-648">      // selected next.</span>
+<span class="source-line-no">649</span><span id="line-649">      return PrivateCellUtil.increaseLastNonMaxByte(trailingZerosTrimmed);</span>
+<span class="source-line-no">650</span><span id="line-650">    } else {</span>
+<span class="source-line-no">651</span><span id="line-651">      return trailingZerosTrimmed;</span>
+<span class="source-line-no">652</span><span id="line-652">    }</span>
+<span class="source-line-no">653</span><span id="line-653">  }</span>
+<span class="source-line-no">654</span><span id="line-654"></span>
+<span class="source-line-no">655</span><span id="line-655">  /**</span>
+<span class="source-line-no">656</span><span id="line-656">   * For forward scanner, next cell hint should not contain any trailing zeroes unless they are part</span>
+<span class="source-line-no">657</span><span id="line-657">   * of fuzzyKeyMeta hint = '\x01\x01\x01\x00\x00' will skip valid row '\x01\x01\x01'</span>
+<span class="source-line-no">658</span><span id="line-658">   * @param toInc - position of incremented byte</span>
+<span class="source-line-no">659</span><span id="line-659">   * @return trimmed version of result</span>
+<span class="source-line-no">660</span><span id="line-660">   */</span>
 <span class="source-line-no">661</span><span id="line-661"></span>
-<span class="source-line-no">662</span><span id="line-662">  /**</span>
-<span class="source-line-no">663</span><span id="line-663">   * Returns true if and only if the fields of the filter that are serialized are equal to the</span>
-<span class="source-line-no">664</span><span id="line-664">   * corresponding fields in other. Used for testing.</span>
-<span class="source-line-no">665</span><span id="line-665">   */</span>
-<span class="source-line-no">666</span><span id="line-666">  @Override</span>
-<span class="source-line-no">667</span><span id="line-667">  boolean areSerializedFieldsEqual(Filter o) {</span>
-<span class="source-line-no">668</span><span id="line-668">    if (o == this) {</span>
-<span class="source-line-no">669</span><span id="line-669">      return true;</span>
-<span class="source-line-no">670</span><span id="line-670">    }</span>
-<span class="source-line-no">671</span><span id="line-671">    if (!(o instanceof FuzzyRowFilter)) {</span>
-<span class="source-line-no">672</span><span id="line-672">      return false;</span>
-<span class="source-line-no">673</span><span id="line-673">    }</span>
-<span class="source-line-no">674</span><span id="line-674">    FuzzyRowFilter other = (FuzzyRowFilter) o;</span>
-<span class="source-line-no">675</span><span id="line-675">    if (this.fuzzyKeysData.size() != other.fuzzyKeysData.size()) return false;</span>
-<span class="source-line-no">676</span><span id="line-676">    for (int i = 0; i &lt; fuzzyKeysData.size(); ++i) {</span>
-<span class="source-line-no">677</span><span id="line-677">      Pair&lt;byte[], byte[]&gt; thisData = this.fuzzyKeysData.get(i);</span>
-<span class="source-line-no">678</span><span id="line-678">      Pair&lt;byte[], byte[]&gt; otherData = other.fuzzyKeysData.get(i);</span>
-<span class="source-line-no">679</span><span id="line-679">      if (</span>
-<span class="source-line-no">680</span><span id="line-680">        !(Bytes.equals(thisData.getFirst(), otherData.getFirst())</span>
-<span class="source-line-no">681</span><span id="line-681">          &amp;&amp; Bytes.equals(thisData.getSecond(), otherData.getSecond()))</span>
-<span class="source-line-no">682</span><span id="line-682">      ) {</span>
-<span class="source-line-no">683</span><span id="line-683">        return false;</span>
-<span class="source-line-no">684</span><span id="line-684">      }</span>
-<span class="source-line-no">685</span><span id="line-685">    }</span>
-<span class="source-line-no">686</span><span id="line-686">    return true;</span>
-<span class="source-line-no">687</span><span id="line-687">  }</span>
-<span class="source-line-no">688</span><span id="line-688"></span>
-<span class="source-line-no">689</span><span id="line-689">  @Override</span>
-<span class="source-line-no">690</span><span id="line-690">  public boolean equals(Object obj) {</span>
-<span class="source-line-no">691</span><span id="line-691">    return obj instanceof Filter &amp;&amp; areSerializedFieldsEqual((Filter) obj);</span>
-<span class="source-line-no">692</span><span id="line-692">  }</span>
-<span class="source-line-no">693</span><span id="line-693"></span>
-<span class="source-line-no">694</span><span id="line-694">  @Override</span>
-<span class="source-line-no">695</span><span id="line-695">  public int hashCode() {</span>
-<span class="source-line-no">696</span><span id="line-696">    return Objects.hash(this.fuzzyKeysData);</span>
-<span class="source-line-no">697</span><span id="line-697">  }</span>
-<span class="source-line-no">698</span><span id="line-698">}</span>
+<span class="source-line-no">662</span><span id="line-662">  private static byte[] trimTrailingZeroes(byte[] result, byte[] fuzzyKeyMeta, int toInc) {</span>
+<span class="source-line-no">663</span><span id="line-663">    int off = fuzzyKeyMeta.length &gt;= result.length ? result.length - 1 : fuzzyKeyMeta.length - 1;</span>
+<span class="source-line-no">664</span><span id="line-664">    for (; off &gt;= 0; off--) {</span>
+<span class="source-line-no">665</span><span id="line-665">      if (fuzzyKeyMeta[off] != 0) break;</span>
+<span class="source-line-no">666</span><span id="line-666">    }</span>
+<span class="source-line-no">667</span><span id="line-667">    if (off &lt; toInc) off = toInc;</span>
+<span class="source-line-no">668</span><span id="line-668">    byte[] retValue = new byte[off + 1];</span>
+<span class="source-line-no">669</span><span id="line-669">    System.arraycopy(result, 0, retValue, 0, retValue.length);</span>
+<span class="source-line-no">670</span><span id="line-670">    return retValue;</span>
+<span class="source-line-no">671</span><span id="line-671">  }</span>
+<span class="source-line-no">672</span><span id="line-672"></span>
+<span class="source-line-no">673</span><span id="line-673">  /**</span>
+<span class="source-line-no">674</span><span id="line-674">   * Returns true if and only if the fields of the filter that are serialized are equal to the</span>
+<span class="source-line-no">675</span><span id="line-675">   * corresponding fields in other. Used for testing.</span>
+<span class="source-line-no">676</span><span id="line-676">   */</span>
+<span class="source-line-no">677</span><span id="line-677">  @Override</span>
+<span class="source-line-no">678</span><span id="line-678">  boolean areSerializedFieldsEqual(Filter o) {</span>
+<span class="source-line-no">679</span><span id="line-679">    if (o == this) {</span>
+<span class="source-line-no">680</span><span id="line-680">      return true;</span>
+<span class="source-line-no">681</span><span id="line-681">    }</span>
+<span class="source-line-no">682</span><span id="line-682">    if (!(o instanceof FuzzyRowFilter)) {</span>
+<span class="source-line-no">683</span><span id="line-683">      return false;</span>
+<span class="source-line-no">684</span><span id="line-684">    }</span>
+<span class="source-line-no">685</span><span id="line-685">    FuzzyRowFilter other = (FuzzyRowFilter) o;</span>
+<span class="source-line-no">686</span><span id="line-686">    if (this.fuzzyKeysData.size() != other.fuzzyKeysData.size()) return false;</span>
+<span class="source-line-no">687</span><span id="line-687">    for (int i = 0; i &lt; fuzzyKeysData.size(); ++i) {</span>
+<span class="source-line-no">688</span><span id="line-688">      Pair&lt;byte[], byte[]&gt; thisData = this.fuzzyKeysData.get(i);</span>
+<span class="source-line-no">689</span><span id="line-689">      Pair&lt;byte[], byte[]&gt; otherData = other.fuzzyKeysData.get(i);</span>
+<span class="source-line-no">690</span><span id="line-690">      if (</span>
+<span class="source-line-no">691</span><span id="line-691">        !(Bytes.equals(thisData.getFirst(), otherData.getFirst())</span>
+<span class="source-line-no">692</span><span id="line-692">          &amp;&amp; Bytes.equals(thisData.getSecond(), otherData.getSecond()))</span>
+<span class="source-line-no">693</span><span id="line-693">      ) {</span>
+<span class="source-line-no">694</span><span id="line-694">        return false;</span>
+<span class="source-line-no">695</span><span id="line-695">      }</span>
+<span class="source-line-no">696</span><span id="line-696">    }</span>
+<span class="source-line-no">697</span><span id="line-697">    return true;</span>
+<span class="source-line-no">698</span><span id="line-698">  }</span>
+<span class="source-line-no">699</span><span id="line-699"></span>
+<span class="source-line-no">700</span><span id="line-700">  @Override</span>
+<span class="source-line-no">701</span><span id="line-701">  public boolean equals(Object obj) {</span>
+<span class="source-line-no">702</span><span id="line-702">    return obj instanceof Filter &amp;&amp; areSerializedFieldsEqual((Filter) obj);</span>
+<span class="source-line-no">703</span><span id="line-703">  }</span>
+<span class="source-line-no">704</span><span id="line-704"></span>
+<span class="source-line-no">705</span><span id="line-705">  @Override</span>
+<span class="source-line-no">706</span><span id="line-706">  public int hashCode() {</span>
+<span class="source-line-no">707</span><span id="line-707">    return Objects.hash(this.fuzzyKeysData);</span>
+<span class="source-line-no">708</span><span id="line-708">  }</span>
+<span class="source-line-no">709</span><span id="line-709">}</span>
 
 
 
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/filter/PrefixFilter.html b/apidocs/src-html/org/apache/hadoop/hbase/filter/PrefixFilter.html
index 3b01d249901..85cf3159f41 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/filter/PrefixFilter.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/filter/PrefixFilter.html
@@ -31,197 +31,184 @@
 <span class="source-line-no">018</span><span id="line-18">package org.apache.hadoop.hbase.filter;</span>
 <span class="source-line-no">019</span><span id="line-19"></span>
 <span class="source-line-no">020</span><span id="line-20">import java.util.ArrayList;</span>
-<span class="source-line-no">021</span><span id="line-21">import java.util.Arrays;</span>
-<span class="source-line-no">022</span><span id="line-22">import org.apache.hadoop.hbase.ByteBufferExtendedCell;</span>
-<span class="source-line-no">023</span><span id="line-23">import org.apache.hadoop.hbase.Cell;</span>
-<span class="source-line-no">024</span><span id="line-24">import org.apache.hadoop.hbase.PrivateCellUtil;</span>
-<span class="source-line-no">025</span><span id="line-25">import org.apache.hadoop.hbase.exceptions.DeserializationException;</span>
-<span class="source-line-no">026</span><span id="line-26">import org.apache.hadoop.hbase.util.ByteBufferUtils;</span>
-<span class="source-line-no">027</span><span id="line-27">import org.apache.hadoop.hbase.util.Bytes;</span>
-<span class="source-line-no">028</span><span id="line-28">import org.apache.yetus.audience.InterfaceAudience;</span>
-<span class="source-line-no">029</span><span id="line-29"></span>
-<span class="source-line-no">030</span><span id="line-30">import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;</span>
-<span class="source-line-no">031</span><span id="line-31">import org.apache.hbase.thirdparty.com.google.protobuf.InvalidProtocolBufferException;</span>
-<span class="source-line-no">032</span><span id="line-32">import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;</span>
-<span class="source-line-no">033</span><span id="line-33"></span>
-<span class="source-line-no">034</span><span id="line-34">import org.apache.hadoop.hbase.shaded.protobuf.generated.FilterProtos;</span>
-<span class="source-line-no">035</span><span id="line-35"></span>
-<span class="source-line-no">036</span><span id="line-36">/**</span>
-<span class="source-line-no">037</span><span id="line-37"> * Pass results that have same row prefix.</span>
-<span class="source-line-no">038</span><span id="line-38"> */</span>
-<span class="source-line-no">039</span><span id="line-39">@InterfaceAudience.Public</span>
-<span class="source-line-no">040</span><span id="line-40">public class PrefixFilter extends FilterBase implements HintingFilter {</span>
-<span class="source-line-no">041</span><span id="line-41">  protected byte[] prefix = null;</span>
-<span class="source-line-no">042</span><span id="line-42">  protected boolean passedPrefix = false;</span>
-<span class="source-line-no">043</span><span id="line-43">  protected boolean filterRow = true;</span>
-<span class="source-line-no">044</span><span id="line-44">  protected boolean provideHint = false;</span>
-<span class="source-line-no">045</span><span id="line-45">  protected Cell reversedNextCellHint;</span>
-<span class="source-line-no">046</span><span id="line-46">  protected Cell forwardNextCellHint;</span>
-<span class="source-line-no">047</span><span id="line-47"></span>
-<span class="source-line-no">048</span><span id="line-48">  public PrefixFilter(final byte[] prefix) {</span>
-<span class="source-line-no">049</span><span id="line-49">    this.prefix = prefix;</span>
-<span class="source-line-no">050</span><span id="line-50">    // Pre-compute hints at creation to avoid re-computing them several times in the corner</span>
-<span class="source-line-no">051</span><span id="line-51">    // case where there are a lot of cells between the hint and the first real match.</span>
-<span class="source-line-no">052</span><span id="line-52">    createCellHints();</span>
-<span class="source-line-no">053</span><span id="line-53">  }</span>
-<span class="source-line-no">054</span><span id="line-54"></span>
-<span class="source-line-no">055</span><span id="line-55">  private void createCellHints() {</span>
-<span class="source-line-no">056</span><span id="line-56">    if (prefix == null) {</span>
-<span class="source-line-no">057</span><span id="line-57">      return;</span>
-<span class="source-line-no">058</span><span id="line-58">    }</span>
-<span class="source-line-no">059</span><span id="line-59">    // On reversed scan hint should be the prefix with last byte incremented</span>
-<span class="source-line-no">060</span><span id="line-60">    byte[] reversedHintBytes = increaseLastNonMaxByte(this.prefix);</span>
-<span class="source-line-no">061</span><span id="line-61">    this.reversedNextCellHint =</span>
-<span class="source-line-no">062</span><span id="line-62">      PrivateCellUtil.createFirstOnRow(reversedHintBytes, 0, (short) reversedHintBytes.length);</span>
-<span class="source-line-no">063</span><span id="line-63">    // On forward scan hint should be the prefix</span>
-<span class="source-line-no">064</span><span id="line-64">    this.forwardNextCellHint = PrivateCellUtil.createFirstOnRow(prefix, 0, (short) prefix.length);</span>
-<span class="source-line-no">065</span><span id="line-65">  }</span>
-<span class="source-line-no">066</span><span id="line-66"></span>
-<span class="source-line-no">067</span><span id="line-67">  public byte[] getPrefix() {</span>
-<span class="source-line-no">068</span><span id="line-68">    return prefix;</span>
-<span class="source-line-no">069</span><span id="line-69">  }</span>
-<span class="source-line-no">070</span><span id="line-70"></span>
-<span class="source-line-no">071</span><span id="line-71">  @Override</span>
-<span class="source-line-no">072</span><span id="line-72">  public boolean filterRowKey(Cell firstRowCell) {</span>
-<span class="source-line-no">073</span><span id="line-73">    if (firstRowCell == null || this.prefix == null) {</span>
-<span class="source-line-no">074</span><span id="line-74">      return true;</span>
-<span class="source-line-no">075</span><span id="line-75">    }</span>
-<span class="source-line-no">076</span><span id="line-76">    if (filterAllRemaining()) {</span>
-<span class="source-line-no">077</span><span id="line-77">      return true;</span>
-<span class="source-line-no">078</span><span id="line-78">    }</span>
-<span class="source-line-no">079</span><span id="line-79">    // if the cell is before =&gt; return false so that getNextCellHint() is invoked.</span>
-<span class="source-line-no">080</span><span id="line-80">    // if they are equal, return false =&gt; pass row</span>
-<span class="source-line-no">081</span><span id="line-81">    // if the cell is after =&gt; return true, filter row</span>
-<span class="source-line-no">082</span><span id="line-82">    // if we are passed the prefix, set flag</span>
-<span class="source-line-no">083</span><span id="line-83">    int cmp;</span>
-<span class="source-line-no">084</span><span id="line-84">    if (firstRowCell instanceof ByteBufferExtendedCell) {</span>
-<span class="source-line-no">085</span><span id="line-85">      cmp = ByteBufferUtils.compareTo(((ByteBufferExtendedCell) firstRowCell).getRowByteBuffer(),</span>
-<span class="source-line-no">086</span><span id="line-86">        ((ByteBufferExtendedCell) firstRowCell).getRowPosition(), this.prefix.length, this.prefix,</span>
-<span class="source-line-no">087</span><span id="line-87">        0, this.prefix.length);</span>
-<span class="source-line-no">088</span><span id="line-88">    } else {</span>
-<span class="source-line-no">089</span><span id="line-89">      cmp = Bytes.compareTo(firstRowCell.getRowArray(), firstRowCell.getRowOffset(),</span>
-<span class="source-line-no">090</span><span id="line-90">        this.prefix.length, this.prefix, 0, this.prefix.length);</span>
-<span class="source-line-no">091</span><span id="line-91">    }</span>
-<span class="source-line-no">092</span><span id="line-92">    if ((!isReversed() &amp;&amp; cmp &gt; 0) || (isReversed() &amp;&amp; cmp &lt; 0)) {</span>
-<span class="source-line-no">093</span><span id="line-93">      passedPrefix = true;</span>
-<span class="source-line-no">094</span><span id="line-94">    }</span>
-<span class="source-line-no">095</span><span id="line-95">    filterRow = (cmp != 0);</span>
-<span class="source-line-no">096</span><span id="line-96">    provideHint = (!isReversed() &amp;&amp; cmp &lt; 0) || (isReversed() &amp;&amp; cmp &gt; 0);</span>
-<span class="source-line-no">097</span><span id="line-97">    return passedPrefix;</span>
-<span class="source-line-no">098</span><span id="line-98">  }</span>
-<span class="source-line-no">099</span><span id="line-99"></span>
-<span class="source-line-no">100</span><span id="line-100">  @Override</span>
-<span class="source-line-no">101</span><span id="line-101">  public ReturnCode filterCell(final Cell c) {</span>
-<span class="source-line-no">102</span><span id="line-102">    if (provideHint) {</span>
-<span class="source-line-no">103</span><span id="line-103">      return ReturnCode.SEEK_NEXT_USING_HINT;</span>
-<span class="source-line-no">104</span><span id="line-104">    }</span>
-<span class="source-line-no">105</span><span id="line-105">    if (filterRow) {</span>
-<span class="source-line-no">106</span><span id="line-106">      return ReturnCode.NEXT_ROW;</span>
-<span class="source-line-no">107</span><span id="line-107">    }</span>
-<span class="source-line-no">108</span><span id="line-108">    return ReturnCode.INCLUDE;</span>
-<span class="source-line-no">109</span><span id="line-109">  }</span>
-<span class="source-line-no">110</span><span id="line-110"></span>
-<span class="source-line-no">111</span><span id="line-111">  @Override</span>
-<span class="source-line-no">112</span><span id="line-112">  public boolean filterRow() {</span>
-<span class="source-line-no">113</span><span id="line-113">    return filterRow;</span>
-<span class="source-line-no">114</span><span id="line-114">  }</span>
-<span class="source-line-no">115</span><span id="line-115"></span>
-<span class="source-line-no">116</span><span id="line-116">  @Override</span>
-<span class="source-line-no">117</span><span id="line-117">  public void reset() {</span>
-<span class="source-line-no">118</span><span id="line-118">    filterRow = true;</span>
-<span class="source-line-no">119</span><span id="line-119">  }</span>
-<span class="source-line-no">120</span><span id="line-120"></span>
-<span class="source-line-no">121</span><span id="line-121">  @Override</span>
-<span class="source-line-no">122</span><span id="line-122">  public boolean filterAllRemaining() {</span>
-<span class="source-line-no">123</span><span id="line-123">    return passedPrefix;</span>
-<span class="source-line-no">124</span><span id="line-124">  }</span>
-<span class="source-line-no">125</span><span id="line-125"></span>
-<span class="source-line-no">126</span><span id="line-126">  @Override</span>
-<span class="source-line-no">127</span><span id="line-127">  public Cell getNextCellHint(Cell cell) {</span>
-<span class="source-line-no">128</span><span id="line-128">    if (reversed) {</span>
-<span class="source-line-no">129</span><span id="line-129">      return reversedNextCellHint;</span>
-<span class="source-line-no">130</span><span id="line-130">    } else {</span>
-<span class="source-line-no">131</span><span id="line-131">      return forwardNextCellHint;</span>
-<span class="source-line-no">132</span><span id="line-132">    }</span>
-<span class="source-line-no">133</span><span id="line-133">  }</span>
-<span class="source-line-no">134</span><span id="line-134"></span>
-<span class="source-line-no">135</span><span id="line-135">  private byte[] increaseLastNonMaxByte(byte[] bytes) {</span>
-<span class="source-line-no">136</span><span id="line-136">    byte[] result = Arrays.copyOf(bytes, bytes.length);</span>
-<span class="source-line-no">137</span><span id="line-137">    for (int i = bytes.length - 1; i &gt;= 0; i--) {</span>
-<span class="source-line-no">138</span><span id="line-138">      byte b = bytes[i];</span>
-<span class="source-line-no">139</span><span id="line-139">      if (b &lt; Byte.MAX_VALUE) {</span>
-<span class="source-line-no">140</span><span id="line-140">        result[i] = (byte) (b + 1);</span>
-<span class="source-line-no">141</span><span id="line-141">        break;</span>
-<span class="source-line-no">142</span><span id="line-142">      }</span>
-<span class="source-line-no">143</span><span id="line-143">    }</span>
-<span class="source-line-no">144</span><span id="line-144">    return result;</span>
-<span class="source-line-no">145</span><span id="line-145">  }</span>
-<span class="source-line-no">146</span><span id="line-146"></span>
-<span class="source-line-no">147</span><span id="line-147">  public static Filter createFilterFromArguments(ArrayList&lt;byte[]&gt; filterArguments) {</span>
-<span class="source-line-no">148</span><span id="line-148">    Preconditions.checkArgument(filterArguments.size() == 1, "Expected 1 but got: %s",</span>
-<span class="source-line-no">149</span><span id="line-149">      filterArguments.size());</span>
-<span class="source-line-no">150</span><span id="line-150">    byte[] prefix = ParseFilter.removeQuotesFromByteArray(filterArguments.get(0));</span>
-<span class="source-line-no">151</span><span id="line-151">    return new PrefixFilter(prefix);</span>
-<span class="source-line-no">152</span><span id="line-152">  }</span>
-<span class="source-line-no">153</span><span id="line-153"></span>
-<span class="source-line-no">154</span><span id="line-154">  /** Returns The filter serialized using pb */</span>
-<span class="source-line-no">155</span><span id="line-155">  @Override</span>
-<span class="source-line-no">156</span><span id="line-156">  public byte[] toByteArray() {</span>
-<span class="source-line-no">157</span><span id="line-157">    FilterProtos.PrefixFilter.Builder builder = FilterProtos.PrefixFilter.newBuilder();</span>
-<span class="source-line-no">158</span><span id="line-158">    if (this.prefix != null) {</span>
-<span class="source-line-no">159</span><span id="line-159">      builder.setPrefix(UnsafeByteOperations.unsafeWrap(this.prefix));</span>
-<span class="source-line-no">160</span><span id="line-160">    }</span>
-<span class="source-line-no">161</span><span id="line-161">    return builder.build().toByteArray();</span>
-<span class="source-line-no">162</span><span id="line-162">  }</span>
-<span class="source-line-no">163</span><span id="line-163"></span>
-<span class="source-line-no">164</span><span id="line-164">  /**</span>
-<span class="source-line-no">165</span><span id="line-165">   * Parse a serialized representation of {@link PrefixFilter}</span>
-<span class="source-line-no">166</span><span id="line-166">   * @param pbBytes A pb serialized {@link PrefixFilter} instance</span>
-<span class="source-line-no">167</span><span id="line-167">   * @return An instance of {@link PrefixFilter} made from &lt;code&gt;bytes&lt;/code&gt;</span>
-<span class="source-line-no">168</span><span id="line-168">   * @throws DeserializationException if an error occurred</span>
-<span class="source-line-no">169</span><span id="line-169">   * @see #toByteArray</span>
-<span class="source-line-no">170</span><span id="line-170">   */</span>
-<span class="source-line-no">171</span><span id="line-171">  public static PrefixFilter parseFrom(final byte[] pbBytes) throws DeserializationException {</span>
-<span class="source-line-no">172</span><span id="line-172">    FilterProtos.PrefixFilter proto;</span>
-<span class="source-line-no">173</span><span id="line-173">    try {</span>
-<span class="source-line-no">174</span><span id="line-174">      proto = FilterProtos.PrefixFilter.parseFrom(pbBytes);</span>
-<span class="source-line-no">175</span><span id="line-175">    } catch (InvalidProtocolBufferException e) {</span>
-<span class="source-line-no">176</span><span id="line-176">      throw new DeserializationException(e);</span>
-<span class="source-line-no">177</span><span id="line-177">    }</span>
-<span class="source-line-no">178</span><span id="line-178">    return new PrefixFilter(proto.hasPrefix() ? proto.getPrefix().toByteArray() : null);</span>
-<span class="source-line-no">179</span><span id="line-179">  }</span>
-<span class="source-line-no">180</span><span id="line-180"></span>
-<span class="source-line-no">181</span><span id="line-181">  /**</span>
-<span class="source-line-no">182</span><span id="line-182">   * Returns true if and only if the fields of the filter that are serialized are equal to the</span>
-<span class="source-line-no">183</span><span id="line-183">   * corresponding fields in other. Used for testing.</span>
-<span class="source-line-no">184</span><span id="line-184">   */</span>
-<span class="source-line-no">185</span><span id="line-185">  @Override</span>
-<span class="source-line-no">186</span><span id="line-186">  boolean areSerializedFieldsEqual(Filter o) {</span>
-<span class="source-line-no">187</span><span id="line-187">    if (o == this) {</span>
-<span class="source-line-no">188</span><span id="line-188">      return true;</span>
-<span class="source-line-no">189</span><span id="line-189">    }</span>
-<span class="source-line-no">190</span><span id="line-190">    if (!(o instanceof PrefixFilter)) {</span>
-<span class="source-line-no">191</span><span id="line-191">      return false;</span>
-<span class="source-line-no">192</span><span id="line-192">    }</span>
-<span class="source-line-no">193</span><span id="line-193">    PrefixFilter other = (PrefixFilter) o;</span>
-<span class="source-line-no">194</span><span id="line-194">    return Bytes.equals(this.getPrefix(), other.getPrefix());</span>
-<span class="source-line-no">195</span><span id="line-195">  }</span>
-<span class="source-line-no">196</span><span id="line-196"></span>
-<span class="source-line-no">197</span><span id="line-197">  @Override</span>
-<span class="source-line-no">198</span><span id="line-198">  public String toString() {</span>
-<span class="source-line-no">199</span><span id="line-199">    return this.getClass().getSimpleName() + " " + Bytes.toStringBinary(this.prefix);</span>
-<span class="source-line-no">200</span><span id="line-200">  }</span>
-<span class="source-line-no">201</span><span id="line-201"></span>
-<span class="source-line-no">202</span><span id="line-202">  @Override</span>
-<span class="source-line-no">203</span><span id="line-203">  public boolean equals(Object obj) {</span>
-<span class="source-line-no">204</span><span id="line-204">    return obj instanceof Filter &amp;&amp; areSerializedFieldsEqual((Filter) obj);</span>
-<span class="source-line-no">205</span><span id="line-205">  }</span>
-<span class="source-line-no">206</span><span id="line-206"></span>
-<span class="source-line-no">207</span><span id="line-207">  @Override</span>
-<span class="source-line-no">208</span><span id="line-208">  public int hashCode() {</span>
-<span class="source-line-no">209</span><span id="line-209">    return Bytes.hashCode(this.getPrefix());</span>
-<span class="source-line-no">210</span><span id="line-210">  }</span>
-<span class="source-line-no">211</span><span id="line-211">}</span>
+<span class="source-line-no">021</span><span id="line-21">import org.apache.hadoop.hbase.ByteBufferExtendedCell;</span>
+<span class="source-line-no">022</span><span id="line-22">import org.apache.hadoop.hbase.Cell;</span>
+<span class="source-line-no">023</span><span id="line-23">import org.apache.hadoop.hbase.PrivateCellUtil;</span>
+<span class="source-line-no">024</span><span id="line-24">import org.apache.hadoop.hbase.exceptions.DeserializationException;</span>
+<span class="source-line-no">025</span><span id="line-25">import org.apache.hadoop.hbase.util.ByteBufferUtils;</span>
+<span class="source-line-no">026</span><span id="line-26">import org.apache.hadoop.hbase.util.Bytes;</span>
+<span class="source-line-no">027</span><span id="line-27">import org.apache.yetus.audience.InterfaceAudience;</span>
+<span class="source-line-no">028</span><span id="line-28"></span>
+<span class="source-line-no">029</span><span id="line-29">import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;</span>
+<span class="source-line-no">030</span><span id="line-30">import org.apache.hbase.thirdparty.com.google.protobuf.InvalidProtocolBufferException;</span>
+<span class="source-line-no">031</span><span id="line-31">import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;</span>
+<span class="source-line-no">032</span><span id="line-32"></span>
+<span class="source-line-no">033</span><span id="line-33">import org.apache.hadoop.hbase.shaded.protobuf.generated.FilterProtos;</span>
+<span class="source-line-no">034</span><span id="line-34"></span>
+<span class="source-line-no">035</span><span id="line-35">/**</span>
+<span class="source-line-no">036</span><span id="line-36"> * Pass results that have same row prefix.</span>
+<span class="source-line-no">037</span><span id="line-37"> */</span>
+<span class="source-line-no">038</span><span id="line-38">@InterfaceAudience.Public</span>
+<span class="source-line-no">039</span><span id="line-39">public class PrefixFilter extends FilterBase implements HintingFilter {</span>
+<span class="source-line-no">040</span><span id="line-40">  protected byte[] prefix = null;</span>
+<span class="source-line-no">041</span><span id="line-41">  protected boolean passedPrefix = false;</span>
+<span class="source-line-no">042</span><span id="line-42">  protected boolean filterRow = true;</span>
+<span class="source-line-no">043</span><span id="line-43">  protected boolean provideHint = false;</span>
+<span class="source-line-no">044</span><span id="line-44">  protected Cell reversedNextCellHint;</span>
+<span class="source-line-no">045</span><span id="line-45">  protected Cell forwardNextCellHint;</span>
+<span class="source-line-no">046</span><span id="line-46"></span>
+<span class="source-line-no">047</span><span id="line-47">  public PrefixFilter(final byte[] prefix) {</span>
+<span class="source-line-no">048</span><span id="line-48">    this.prefix = prefix;</span>
+<span class="source-line-no">049</span><span id="line-49">    // Pre-compute hints at creation to avoid re-computing them several times in the corner</span>
+<span class="source-line-no">050</span><span id="line-50">    // case where there are a lot of cells between the hint and the first real match.</span>
+<span class="source-line-no">051</span><span id="line-51">    createCellHints();</span>
+<span class="source-line-no">052</span><span id="line-52">  }</span>
+<span class="source-line-no">053</span><span id="line-53"></span>
+<span class="source-line-no">054</span><span id="line-54">  private void createCellHints() {</span>
+<span class="source-line-no">055</span><span id="line-55">    if (prefix == null) {</span>
+<span class="source-line-no">056</span><span id="line-56">      return;</span>
+<span class="source-line-no">057</span><span id="line-57">    }</span>
+<span class="source-line-no">058</span><span id="line-58">    // On reversed scan hint should be the prefix with last byte incremented</span>
+<span class="source-line-no">059</span><span id="line-59">    byte[] reversedHintBytes = PrivateCellUtil.increaseLastNonMaxByte(this.prefix);</span>
+<span class="source-line-no">060</span><span id="line-60">    this.reversedNextCellHint =</span>
+<span class="source-line-no">061</span><span id="line-61">      PrivateCellUtil.createFirstOnRow(reversedHintBytes, 0, (short) reversedHintBytes.length);</span>
+<span class="source-line-no">062</span><span id="line-62">    // On forward scan hint should be the prefix</span>
+<span class="source-line-no">063</span><span id="line-63">    this.forwardNextCellHint = PrivateCellUtil.createFirstOnRow(prefix, 0, (short) prefix.length);</span>
+<span class="source-line-no">064</span><span id="line-64">  }</span>
+<span class="source-line-no">065</span><span id="line-65"></span>
+<span class="source-line-no">066</span><span id="line-66">  public byte[] getPrefix() {</span>
+<span class="source-line-no">067</span><span id="line-67">    return prefix;</span>
+<span class="source-line-no">068</span><span id="line-68">  }</span>
+<span class="source-line-no">069</span><span id="line-69"></span>
+<span class="source-line-no">070</span><span id="line-70">  @Override</span>
+<span class="source-line-no">071</span><span id="line-71">  public boolean filterRowKey(Cell firstRowCell) {</span>
+<span class="source-line-no">072</span><span id="line-72">    if (firstRowCell == null || this.prefix == null) {</span>
+<span class="source-line-no">073</span><span id="line-73">      return true;</span>
+<span class="source-line-no">074</span><span id="line-74">    }</span>
+<span class="source-line-no">075</span><span id="line-75">    if (filterAllRemaining()) {</span>
+<span class="source-line-no">076</span><span id="line-76">      return true;</span>
+<span class="source-line-no">077</span><span id="line-77">    }</span>
+<span class="source-line-no">078</span><span id="line-78">    // if the cell is before =&gt; return false so that getNextCellHint() is invoked.</span>
+<span class="source-line-no">079</span><span id="line-79">    // if they are equal, return false =&gt; pass row</span>
+<span class="source-line-no">080</span><span id="line-80">    // if the cell is after =&gt; return true, filter row</span>
+<span class="source-line-no">081</span><span id="line-81">    // if we are passed the prefix, set flag</span>
+<span class="source-line-no">082</span><span id="line-82">    int cmp;</span>
+<span class="source-line-no">083</span><span id="line-83">    if (firstRowCell instanceof ByteBufferExtendedCell) {</span>
+<span class="source-line-no">084</span><span id="line-84">      cmp = ByteBufferUtils.compareTo(((ByteBufferExtendedCell) firstRowCell).getRowByteBuffer(),</span>
+<span class="source-line-no">085</span><span id="line-85">        ((ByteBufferExtendedCell) firstRowCell).getRowPosition(), this.prefix.length, this.prefix,</span>
+<span class="source-line-no">086</span><span id="line-86">        0, this.prefix.length);</span>
+<span class="source-line-no">087</span><span id="line-87">    } else {</span>
+<span class="source-line-no">088</span><span id="line-88">      cmp = Bytes.compareTo(firstRowCell.getRowArray(), firstRowCell.getRowOffset(),</span>
+<span class="source-line-no">089</span><span id="line-89">        this.prefix.length, this.prefix, 0, this.prefix.length);</span>
+<span class="source-line-no">090</span><span id="line-90">    }</span>
+<span class="source-line-no">091</span><span id="line-91">    if ((!isReversed() &amp;&amp; cmp &gt; 0) || (isReversed() &amp;&amp; cmp &lt; 0)) {</span>
+<span class="source-line-no">092</span><span id="line-92">      passedPrefix = true;</span>
+<span class="source-line-no">093</span><span id="line-93">    }</span>
+<span class="source-line-no">094</span><span id="line-94">    filterRow = (cmp != 0);</span>
+<span class="source-line-no">095</span><span id="line-95">    provideHint = (!isReversed() &amp;&amp; cmp &lt; 0) || (isReversed() &amp;&amp; cmp &gt; 0);</span>
+<span class="source-line-no">096</span><span id="line-96">    return passedPrefix;</span>
+<span class="source-line-no">097</span><span id="line-97">  }</span>
+<span class="source-line-no">098</span><span id="line-98"></span>
+<span class="source-line-no">099</span><span id="line-99">  @Override</span>
+<span class="source-line-no">100</span><span id="line-100">  public ReturnCode filterCell(final Cell c) {</span>
+<span class="source-line-no">101</span><span id="line-101">    if (provideHint) {</span>
+<span class="source-line-no">102</span><span id="line-102">      return ReturnCode.SEEK_NEXT_USING_HINT;</span>
+<span class="source-line-no">103</span><span id="line-103">    }</span>
+<span class="source-line-no">104</span><span id="line-104">    if (filterRow) {</span>
+<span class="source-line-no">105</span><span id="line-105">      return ReturnCode.NEXT_ROW;</span>
+<span class="source-line-no">106</span><span id="line-106">    }</span>
+<span class="source-line-no">107</span><span id="line-107">    return ReturnCode.INCLUDE;</span>
+<span class="source-line-no">108</span><span id="line-108">  }</span>
+<span class="source-line-no">109</span><span id="line-109"></span>
+<span class="source-line-no">110</span><span id="line-110">  @Override</span>
+<span class="source-line-no">111</span><span id="line-111">  public boolean filterRow() {</span>
+<span class="source-line-no">112</span><span id="line-112">    return filterRow;</span>
+<span class="source-line-no">113</span><span id="line-113">  }</span>
+<span class="source-line-no">114</span><span id="line-114"></span>
+<span class="source-line-no">115</span><span id="line-115">  @Override</span>
+<span class="source-line-no">116</span><span id="line-116">  public void reset() {</span>
+<span class="source-line-no">117</span><span id="line-117">    filterRow = true;</span>
+<span class="source-line-no">118</span><span id="line-118">  }</span>
+<span class="source-line-no">119</span><span id="line-119"></span>
+<span class="source-line-no">120</span><span id="line-120">  @Override</span>
+<span class="source-line-no">121</span><span id="line-121">  public boolean filterAllRemaining() {</span>
+<span class="source-line-no">122</span><span id="line-122">    return passedPrefix;</span>
+<span class="source-line-no">123</span><span id="line-123">  }</span>
+<span class="source-line-no">124</span><span id="line-124"></span>
+<span class="source-line-no">125</span><span id="line-125">  @Override</span>
+<span class="source-line-no">126</span><span id="line-126">  public Cell getNextCellHint(Cell cell) {</span>
+<span class="source-line-no">127</span><span id="line-127">    if (reversed) {</span>
+<span class="source-line-no">128</span><span id="line-128">      return reversedNextCellHint;</span>
+<span class="source-line-no">129</span><span id="line-129">    } else {</span>
+<span class="source-line-no">130</span><span id="line-130">      return forwardNextCellHint;</span>
+<span class="source-line-no">131</span><span id="line-131">    }</span>
+<span class="source-line-no">132</span><span id="line-132">  }</span>
+<span class="source-line-no">133</span><span id="line-133"></span>
+<span class="source-line-no">134</span><span id="line-134">  public static Filter createFilterFromArguments(ArrayList&lt;byte[]&gt; filterArguments) {</span>
+<span class="source-line-no">135</span><span id="line-135">    Preconditions.checkArgument(filterArguments.size() == 1, "Expected 1 but got: %s",</span>
+<span class="source-line-no">136</span><span id="line-136">      filterArguments.size());</span>
+<span class="source-line-no">137</span><span id="line-137">    byte[] prefix = ParseFilter.removeQuotesFromByteArray(filterArguments.get(0));</span>
+<span class="source-line-no">138</span><span id="line-138">    return new PrefixFilter(prefix);</span>
+<span class="source-line-no">139</span><span id="line-139">  }</span>
+<span class="source-line-no">140</span><span id="line-140"></span>
+<span class="source-line-no">141</span><span id="line-141">  /** Returns The filter serialized using pb */</span>
+<span class="source-line-no">142</span><span id="line-142">  @Override</span>
+<span class="source-line-no">143</span><span id="line-143">  public byte[] toByteArray() {</span>
+<span class="source-line-no">144</span><span id="line-144">    FilterProtos.PrefixFilter.Builder builder = FilterProtos.PrefixFilter.newBuilder();</span>
+<span class="source-line-no">145</span><span id="line-145">    if (this.prefix != null) {</span>
+<span class="source-line-no">146</span><span id="line-146">      builder.setPrefix(UnsafeByteOperations.unsafeWrap(this.prefix));</span>
+<span class="source-line-no">147</span><span id="line-147">    }</span>
+<span class="source-line-no">148</span><span id="line-148">    return builder.build().toByteArray();</span>
+<span class="source-line-no">149</span><span id="line-149">  }</span>
+<span class="source-line-no">150</span><span id="line-150"></span>
+<span class="source-line-no">151</span><span id="line-151">  /**</span>
+<span class="source-line-no">152</span><span id="line-152">   * Parse a serialized representation of {@link PrefixFilter}</span>
+<span class="source-line-no">153</span><span id="line-153">   * @param pbBytes A pb serialized {@link PrefixFilter} instance</span>
+<span class="source-line-no">154</span><span id="line-154">   * @return An instance of {@link PrefixFilter} made from &lt;code&gt;bytes&lt;/code&gt;</span>
+<span class="source-line-no">155</span><span id="line-155">   * @throws DeserializationException if an error occurred</span>
+<span class="source-line-no">156</span><span id="line-156">   * @see #toByteArray</span>
+<span class="source-line-no">157</span><span id="line-157">   */</span>
+<span class="source-line-no">158</span><span id="line-158">  public static PrefixFilter parseFrom(final byte[] pbBytes) throws DeserializationException {</span>
+<span class="source-line-no">159</span><span id="line-159">    FilterProtos.PrefixFilter proto;</span>
+<span class="source-line-no">160</span><span id="line-160">    try {</span>
+<span class="source-line-no">161</span><span id="line-161">      proto = FilterProtos.PrefixFilter.parseFrom(pbBytes);</span>
+<span class="source-line-no">162</span><span id="line-162">    } catch (InvalidProtocolBufferException e) {</span>
+<span class="source-line-no">163</span><span id="line-163">      throw new DeserializationException(e);</span>
+<span class="source-line-no">164</span><span id="line-164">    }</span>
+<span class="source-line-no">165</span><span id="line-165">    return new PrefixFilter(proto.hasPrefix() ? proto.getPrefix().toByteArray() : null);</span>
+<span class="source-line-no">166</span><span id="line-166">  }</span>
+<span class="source-line-no">167</span><span id="line-167"></span>
+<span class="source-line-no">168</span><span id="line-168">  /**</span>
+<span class="source-line-no">169</span><span id="line-169">   * Returns true if and only if the fields of the filter that are serialized are equal to the</span>
+<span class="source-line-no">170</span><span id="line-170">   * corresponding fields in other. Used for testing.</span>
+<span class="source-line-no">171</span><span id="line-171">   */</span>
+<span class="source-line-no">172</span><span id="line-172">  @Override</span>
+<span class="source-line-no">173</span><span id="line-173">  boolean areSerializedFieldsEqual(Filter o) {</span>
+<span class="source-line-no">174</span><span id="line-174">    if (o == this) {</span>
+<span class="source-line-no">175</span><span id="line-175">      return true;</span>
+<span class="source-line-no">176</span><span id="line-176">    }</span>
+<span class="source-line-no">177</span><span id="line-177">    if (!(o instanceof PrefixFilter)) {</span>
+<span class="source-line-no">178</span><span id="line-178">      return false;</span>
+<span class="source-line-no">179</span><span id="line-179">    }</span>
+<span class="source-line-no">180</span><span id="line-180">    PrefixFilter other = (PrefixFilter) o;</span>
+<span class="source-line-no">181</span><span id="line-181">    return Bytes.equals(this.getPrefix(), other.getPrefix());</span>
+<span class="source-line-no">182</span><span id="line-182">  }</span>
+<span class="source-line-no">183</span><span id="line-183"></span>
+<span class="source-line-no">184</span><span id="line-184">  @Override</span>
+<span class="source-line-no">185</span><span id="line-185">  public String toString() {</span>
+<span class="source-line-no">186</span><span id="line-186">    return this.getClass().getSimpleName() + " " + Bytes.toStringBinary(this.prefix);</span>
+<span class="source-line-no">187</span><span id="line-187">  }</span>
+<span class="source-line-no">188</span><span id="line-188"></span>
+<span class="source-line-no">189</span><span id="line-189">  @Override</span>
+<span class="source-line-no">190</span><span id="line-190">  public boolean equals(Object obj) {</span>
+<span class="source-line-no">191</span><span id="line-191">    return obj instanceof Filter &amp;&amp; areSerializedFieldsEqual((Filter) obj);</span>
+<span class="source-line-no">192</span><span id="line-192">  }</span>
+<span class="source-line-no">193</span><span id="line-193"></span>
+<span class="source-line-no">194</span><span id="line-194">  @Override</span>
+<span class="source-line-no">195</span><span id="line-195">  public int hashCode() {</span>
+<span class="source-line-no">196</span><span id="line-196">    return Bytes.hashCode(this.getPrefix());</span>
+<span class="source-line-no">197</span><span id="line-197">  }</span>
+<span class="source-line-no">198</span><span id="line-198">}</span>
 
 
 
diff --git a/book.html b/book.html
index fbee15c8626..2171dc468e4 100644
--- a/book.html
+++ b/book.html
@@ -49389,7 +49389,7 @@ org/apache/hadoop/hbase/security/access/AccessControlClient.revoke:(Lorg/apache/
 <div id="footer">
 <div id="footer-text">
 Version 4.0.0-alpha-1-SNAPSHOT<br>
-Last updated 2024-11-22 14:37:21 UTC
+Last updated 2024-11-26 14:30:58 UTC
 </div>
 </div>
 <script type="text/x-mathjax-config">
diff --git a/bulk-loads.html b/bulk-loads.html
index d0e7cdec35c..6024995760b 100644
--- a/bulk-loads.html
+++ b/bulk-loads.html
@@ -184,7 +184,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2024-11-22
+        Last Published: 2024-11-26
       </div>
         </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 6485c9bf969..7aaf979eda3 100644
--- a/checkstyle-aggregate.html
+++ b/checkstyle-aggregate.html
@@ -4193,19 +4193,19 @@
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>2586</td></tr>
+<td>2587</td></tr>
 <tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>2744</td></tr>
+<td>2745</td></tr>
 <tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>2757</td></tr></table></section><section>
+<td>2758</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.RegionLocations.java">org/apache/hadoop/hbase/RegionLocations.java</h3>
 <table border="0" class="table table-striped">
 <tr class="b">
@@ -6611,19 +6611,19 @@
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>654</td></tr>
+<td>665</td></tr>
 <tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>656</td></tr>
+<td>667</td></tr>
 <tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>675</td></tr></table></section><section>
+<td>686</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.filter.InclusiveStopFilter.java">org/apache/hadoop/hbase/filter/InclusiveStopFilter.java</h3>
 <table border="0" class="table table-striped">
 <tr class="a">
@@ -7017,13 +7017,13 @@
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
-<td>236</td></tr>
+<td>237</td></tr>
 <tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
-<td>246</td></tr></table></section><section>
+<td>247</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.filter.TestMultipleColumnPrefixFilter.java">org/apache/hadoop/hbase/filter/TestMultipleColumnPrefixFilter.java</h3>
 <table border="0" class="table table-striped">
 <tr class="a">
@@ -18432,7 +18432,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2024-11-22
+        Last Published: 2024-11-26
       </div>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/checkstyle.rss b/checkstyle.rss
index 1138f91c6e3..3b60f962232 100644
--- a/checkstyle.rss
+++ b/checkstyle.rss
@@ -704,7 +704,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.http.RegionVisualizer.java">org/apache/hadoop/hbase/master/http/RegionVisualizer.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.SplitWALProcedure.java">org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.java</a>
                 </td>
                 <td>
                   0
@@ -718,7 +718,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.SplitWALProcedure.java">org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.http.RegionVisualizer.java">org/apache/hadoop/hbase/master/http/RegionVisualizer.java</a>
                 </td>
                 <td>
                   0
@@ -858,7 +858,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.hfile.HFileDataBlockEncoderImpl.java">org/apache/hadoop/hbase/io/hfile/HFileDataBlockEncoderImpl.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.NonThreadSafeMemStoreSizing.java">org/apache/hadoop/hbase/regionserver/NonThreadSafeMemStoreSizing.java</a>
                 </td>
                 <td>
                   0
@@ -872,7 +872,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.NonThreadSafeMemStoreSizing.java">org/apache/hadoop/hbase/regionserver/NonThreadSafeMemStoreSizing.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.hfile.HFileDataBlockEncoderImpl.java">org/apache/hadoop/hbase/io/hfile/HFileDataBlockEncoderImpl.java</a>
                 </td>
                 <td>
                   0
@@ -1376,7 +1376,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.wal.FSHLogProvider.java">org/apache/hadoop/hbase/wal/FSHLogProvider.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TableSnapshotScanner.java">org/apache/hadoop/hbase/client/TableSnapshotScanner.java</a>
                 </td>
                 <td>
                   0
@@ -1390,7 +1390,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TableSnapshotScanner.java">org/apache/hadoop/hbase/client/TableSnapshotScanner.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.wal.FSHLogProvider.java">org/apache/hadoop/hbase/wal/FSHLogProvider.java</a>
                 </td>
                 <td>
                   0
@@ -2412,7 +2412,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.filter.TestMultiRowRangeFilter.java">org/apache/hadoop/hbase/filter/TestMultiRowRangeFilter.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestResult.java">org/apache/hadoop/hbase/client/TestResult.java</a>
                 </td>
                 <td>
                   0
@@ -2426,7 +2426,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestResult.java">org/apache/hadoop/hbase/client/TestResult.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.filter.TestMultiRowRangeFilter.java">org/apache/hadoop/hbase/filter/TestMultiRowRangeFilter.java</a>
                 </td>
                 <td>
                   0
@@ -2706,7 +2706,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.mob.MobUtils.java">org/apache/hadoop/hbase/mob/MobUtils.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.DateTieredStoreEngine.java">org/apache/hadoop/hbase/regionserver/DateTieredStoreEngine.java</a>
                 </td>
                 <td>
                   0
@@ -2720,7 +2720,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.DateTieredStoreEngine.java">org/apache/hadoop/hbase/regionserver/DateTieredStoreEngine.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.mob.MobUtils.java">org/apache/hadoop/hbase/mob/MobUtils.java</a>
                 </td>
                 <td>
                   0
@@ -3238,7 +3238,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.coprocessor.TestCoprocessorMetrics.java">org/apache/hadoop/hbase/coprocessor/TestCoprocessorMetrics.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.hfile.TestForceCacheImportantBlocks.java">org/apache/hadoop/hbase/io/hfile/TestForceCacheImportantBlocks.java</a>
                 </td>
                 <td>
                   0
@@ -3247,12 +3247,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  2
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.hfile.TestForceCacheImportantBlocks.java">org/apache/hadoop/hbase/io/hfile/TestForceCacheImportantBlocks.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.coprocessor.TestCoprocessorMetrics.java">org/apache/hadoop/hbase/coprocessor/TestCoprocessorMetrics.java</a>
                 </td>
                 <td>
                   0
@@ -3261,7 +3261,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  2
+                  0
                 </td>
               </tr>
                           <tr>
@@ -3812,7 +3812,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestCompoundBloomFilter.java">org/apache/hadoop/hbase/regionserver/TestCompoundBloomFilter.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.assignment.TestRegionBypass.java">org/apache/hadoop/hbase/master/assignment/TestRegionBypass.java</a>
                 </td>
                 <td>
                   0
@@ -3821,12 +3821,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  8
+                  0
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.assignment.TestRegionBypass.java">org/apache/hadoop/hbase/master/assignment/TestRegionBypass.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestCompoundBloomFilter.java">org/apache/hadoop/hbase/regionserver/TestCompoundBloomFilter.java</a>
                 </td>
                 <td>
                   0
@@ -3835,7 +3835,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  8
                 </td>
               </tr>
                           <tr>
@@ -4624,7 +4624,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.namequeues.TestRpcLogDetails.java">org/apache/hadoop/hbase/namequeues/TestRpcLogDetails.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestScanWithBloomError.java">org/apache/hadoop/hbase/regionserver/TestScanWithBloomError.java</a>
                 </td>
                 <td>
                   0
@@ -4633,12 +4633,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  2
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestScanWithBloomError.java">org/apache/hadoop/hbase/regionserver/TestScanWithBloomError.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.namequeues.TestRpcLogDetails.java">org/apache/hadoop/hbase/namequeues/TestRpcLogDetails.java</a>
                 </td>
                 <td>
                   0
@@ -4647,7 +4647,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  2
+                  0
                 </td>
               </tr>
                           <tr>
@@ -5268,7 +5268,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.ProtobufWALStreamReader.java">org/apache/hadoop/hbase/regionserver/wal/ProtobufWALStreamReader.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.assignment.RegionRemoteProcedureBase.java">org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.java</a>
                 </td>
                 <td>
                   0
@@ -5282,7 +5282,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.assignment.RegionRemoteProcedureBase.java">org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.ProtobufWALStreamReader.java">org/apache/hadoop/hbase/regionserver/wal/ProtobufWALStreamReader.java</a>
                 </td>
                 <td>
                   0
@@ -5478,7 +5478,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.util.HFileArchiveTestingUtil.java">org/apache/hadoop/hbase/util/HFileArchiveTestingUtil.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.TestQuotaObserverChore.java">org/apache/hadoop/hbase/quotas/TestQuotaObserverChore.java</a>
                 </td>
                 <td>
                   0
@@ -5487,12 +5487,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  6
+                  0
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.TestQuotaObserverChore.java">org/apache/hadoop/hbase/quotas/TestQuotaObserverChore.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.util.HFileArchiveTestingUtil.java">org/apache/hadoop/hbase/util/HFileArchiveTestingUtil.java</a>
                 </td>
                 <td>
                   0
@@ -5501,7 +5501,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  6
                 </td>
               </tr>
                           <tr>
@@ -5590,7 +5590,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.TestCustomWALCellCodec.java">org/apache/hadoop/hbase/regionserver/wal/TestCustomWALCellCodec.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.procedure.TestProcedureDescriber.java">org/apache/hadoop/hbase/procedure/TestProcedureDescriber.java</a>
                 </td>
                 <td>
                   0
@@ -5599,12 +5599,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  1
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.procedure.TestProcedureDescriber.java">org/apache/hadoop/hbase/procedure/TestProcedureDescriber.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.TestCustomWALCellCodec.java">org/apache/hadoop/hbase/regionserver/wal/TestCustomWALCellCodec.java</a>
                 </td>
                 <td>
                   0
@@ -5613,7 +5613,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  0
                 </td>
               </tr>
                           <tr>
@@ -6052,7 +6052,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.Chunk.java">org/apache/hadoop/hbase/regionserver/Chunk.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.ExceedOperationQuota.java">org/apache/hadoop/hbase/quotas/ExceedOperationQuota.java</a>
                 </td>
                 <td>
                   0
@@ -6066,7 +6066,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.ExceedOperationQuota.java">org/apache/hadoop/hbase/quotas/ExceedOperationQuota.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.Chunk.java">org/apache/hadoop/hbase/regionserver/Chunk.java</a>
                 </td>
                 <td>
                   0
@@ -6248,7 +6248,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.coprocessor.TestCoprocessorInterface.java">org/apache/hadoop/hbase/coprocessor/TestCoprocessorInterface.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.TestQuotaObserverChoreRegionReports.java">org/apache/hadoop/hbase/quotas/TestQuotaObserverChoreRegionReports.java</a>
                 </td>
                 <td>
                   0
@@ -6257,12 +6257,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  0
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.TestQuotaObserverChoreRegionReports.java">org/apache/hadoop/hbase/quotas/TestQuotaObserverChoreRegionReports.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.coprocessor.TestCoprocessorInterface.java">org/apache/hadoop/hbase/coprocessor/TestCoprocessorInterface.java</a>
                 </td>
                 <td>
                   0
@@ -6271,7 +6271,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  1
                 </td>
               </tr>
                           <tr>
@@ -6752,7 +6752,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.encoding.TestChangingEncoding.java">org/apache/hadoop/hbase/io/encoding/TestChangingEncoding.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestCloseAnOpeningRegion.java">org/apache/hadoop/hbase/master/TestCloseAnOpeningRegion.java</a>
                 </td>
                 <td>
                   0
@@ -6766,7 +6766,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestCloseAnOpeningRegion.java">org/apache/hadoop/hbase/master/TestCloseAnOpeningRegion.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.encoding.TestChangingEncoding.java">org/apache/hadoop/hbase/io/encoding/TestChangingEncoding.java</a>
                 </td>
                 <td>
                   0
@@ -7116,7 +7116,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.ProtobufWALTailingReader.java">org/apache/hadoop/hbase/regionserver/wal/ProtobufWALTailingReader.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.ServerCrashException.java">org/apache/hadoop/hbase/master/procedure/ServerCrashException.java</a>
                 </td>
                 <td>
                   0
@@ -7130,7 +7130,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.ServerCrashException.java">org/apache/hadoop/hbase/master/procedure/ServerCrashException.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.ProtobufWALTailingReader.java">org/apache/hadoop/hbase/regionserver/wal/ProtobufWALTailingReader.java</a>
                 </td>
                 <td>
                   0
@@ -7606,7 +7606,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.MemStoreCompactorSegmentsIterator.java">org/apache/hadoop/hbase/regionserver/MemStoreCompactorSegmentsIterator.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.NoSuchProcedureException.java">org/apache/hadoop/hbase/master/NoSuchProcedureException.java</a>
                 </td>
                 <td>
                   0
@@ -7620,7 +7620,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.NoSuchProcedureException.java">org/apache/hadoop/hbase/master/NoSuchProcedureException.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.MemStoreCompactorSegmentsIterator.java">org/apache/hadoop/hbase/regionserver/MemStoreCompactorSegmentsIterator.java</a>
                 </td>
                 <td>
                   0
@@ -7704,7 +7704,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.log.HBaseMarkers.java">org/apache/hadoop/hbase/log/HBaseMarkers.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.RawCellBuilder.java">org/apache/hadoop/hbase/RawCellBuilder.java</a>
                 </td>
                 <td>
                   0
@@ -7713,12 +7713,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  0
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.RawCellBuilder.java">org/apache/hadoop/hbase/RawCellBuilder.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.log.HBaseMarkers.java">org/apache/hadoop/hbase/log/HBaseMarkers.java</a>
                 </td>
                 <td>
                   0
@@ -7727,7 +7727,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  1
                 </td>
               </tr>
                           <tr>
@@ -11512,7 +11512,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestRegionServerCrashDisableWAL.java">org/apache/hadoop/hbase/regionserver/TestRegionServerCrashDisableWAL.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.TestMetaTableAccessor.java">org/apache/hadoop/hbase/TestMetaTableAccessor.java</a>
                 </td>
                 <td>
                   0
@@ -11521,12 +11521,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  2
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.TestMetaTableAccessor.java">org/apache/hadoop/hbase/TestMetaTableAccessor.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestRegionServerCrashDisableWAL.java">org/apache/hadoop/hbase/regionserver/TestRegionServerCrashDisableWAL.java</a>
                 </td>
                 <td>
                   0
@@ -11535,7 +11535,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  2
+                  0
                 </td>
               </tr>
                           <tr>
@@ -11680,7 +11680,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.protobuf.ReplicationProtobufUtil.java">org/apache/hadoop/hbase/protobuf/ReplicationProtobufUtil.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.SnapshotProcedure.java">org/apache/hadoop/hbase/master/procedure/SnapshotProcedure.java</a>
                 </td>
                 <td>
                   0
@@ -11689,12 +11689,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  0
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.SnapshotProcedure.java">org/apache/hadoop/hbase/master/procedure/SnapshotProcedure.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.protobuf.ReplicationProtobufUtil.java">org/apache/hadoop/hbase/protobuf/ReplicationProtobufUtil.java</a>
                 </td>
                 <td>
                   0
@@ -11703,12 +11703,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  1
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.TestMultiVersions.java">org/apache/hadoop/hbase/TestMultiVersions.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.TestWALCellCodecWithCompression.java">org/apache/hadoop/hbase/regionserver/wal/TestWALCellCodecWithCompression.java</a>
                 </td>
                 <td>
                   0
@@ -11722,7 +11722,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.TestWALCellCodecWithCompression.java">org/apache/hadoop/hbase/regionserver/wal/TestWALCellCodecWithCompression.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.TestMultiVersions.java">org/apache/hadoop/hbase/TestMultiVersions.java</a>
                 </td>
                 <td>
                   0
@@ -11848,7 +11848,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestCleanupMetaReplicaThroughConfig.java">org/apache/hadoop/hbase/client/TestCleanupMetaReplicaThroughConfig.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.TestCreateTableProcedureMuitipleRegions.java">org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedureMuitipleRegions.java</a>
                 </td>
                 <td>
                   0
@@ -11862,7 +11862,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.TestCreateTableProcedureMuitipleRegions.java">org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedureMuitipleRegions.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestCleanupMetaReplicaThroughConfig.java">org/apache/hadoop/hbase/client/TestCleanupMetaReplicaThroughConfig.java</a>
                 </td>
                 <td>
                   0
@@ -12716,7 +12716,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.types.StructBuilder.java">org/apache/hadoop/hbase/types/StructBuilder.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.DeallocateRewriteByteBuffAllocator.java">org/apache/hadoop/hbase/io/DeallocateRewriteByteBuffAllocator.java</a>
                 </td>
                 <td>
                   0
@@ -12730,7 +12730,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.DeallocateRewriteByteBuffAllocator.java">org/apache/hadoop/hbase/io/DeallocateRewriteByteBuffAllocator.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.types.StructBuilder.java">org/apache/hadoop/hbase/types/StructBuilder.java</a>
                 </td>
                 <td>
                   0
@@ -13150,7 +13150,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.storefiletracker.TestStoreFileListFilePrinter.java">org/apache/hadoop/hbase/regionserver/storefiletracker/TestStoreFileListFilePrinter.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestMaster.java">org/apache/hadoop/hbase/master/TestMaster.java</a>
                 </td>
                 <td>
                   0
@@ -13164,7 +13164,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestMaster.java">org/apache/hadoop/hbase/master/TestMaster.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.storefiletracker.TestStoreFileListFilePrinter.java">org/apache/hadoop/hbase/regionserver/storefiletracker/TestStoreFileListFilePrinter.java</a>
                 </td>
                 <td>
                   0
@@ -14872,7 +14872,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.procedure2.store.region.HFileProcedurePrettyPrinter.java">org/apache/hadoop/hbase/procedure2/store/region/HFileProcedurePrettyPrinter.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.normalizer.SplitNormalizationPlan.java">org/apache/hadoop/hbase/master/normalizer/SplitNormalizationPlan.java</a>
                 </td>
                 <td>
                   0
@@ -14886,7 +14886,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.normalizer.SplitNormalizationPlan.java">org/apache/hadoop/hbase/master/normalizer/SplitNormalizationPlan.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.procedure2.store.region.HFileProcedurePrettyPrinter.java">org/apache/hadoop/hbase/procedure2/store/region/HFileProcedurePrettyPrinter.java</a>
                 </td>
                 <td>
                   0
@@ -16062,7 +16062,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.coprocessor.TestMetaTableMetrics.java">org/apache/hadoop/hbase/coprocessor/TestMetaTableMetrics.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.TestAsyncWALReplayValueCompression.java">org/apache/hadoop/hbase/regionserver/wal/TestAsyncWALReplayValueCompression.java</a>
                 </td>
                 <td>
                   0
@@ -16076,7 +16076,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.TestAsyncWALReplayValueCompression.java">org/apache/hadoop/hbase/regionserver/wal/TestAsyncWALReplayValueCompression.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.coprocessor.TestMetaTableMetrics.java">org/apache/hadoop/hbase/coprocessor/TestMetaTableMetrics.java</a>
                 </td>
                 <td>
                   0
@@ -17546,7 +17546,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.filter.TestFilter.java">org/apache/hadoop/hbase/filter/TestFilter.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.TestEditsDroppedWithDroppedTableNS.java">org/apache/hadoop/hbase/replication/TestEditsDroppedWithDroppedTableNS.java</a>
                 </td>
                 <td>
                   0
@@ -17555,12 +17555,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  5
+                  0
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.TestEditsDroppedWithDroppedTableNS.java">org/apache/hadoop/hbase/replication/TestEditsDroppedWithDroppedTableNS.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.filter.TestFilter.java">org/apache/hadoop/hbase/filter/TestFilter.java</a>
                 </td>
                 <td>
                   0
@@ -17569,7 +17569,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  5
                 </td>
               </tr>
                           <tr>
@@ -17616,7 +17616,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.filter.TestBitComparator.java">org/apache/hadoop/hbase/filter/TestBitComparator.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestMasterNoCluster.java">org/apache/hadoop/hbase/master/TestMasterNoCluster.java</a>
                 </td>
                 <td>
                   0
@@ -17630,7 +17630,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestMasterNoCluster.java">org/apache/hadoop/hbase/master/TestMasterNoCluster.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.filter.TestBitComparator.java">org/apache/hadoop/hbase/filter/TestBitComparator.java</a>
                 </td>
                 <td>
                   0
@@ -17700,7 +17700,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.constraint.AllFailConstraint.java">org/apache/hadoop/hbase/constraint/AllFailConstraint.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.AbstractTestFSWAL.java">org/apache/hadoop/hbase/regionserver/wal/AbstractTestFSWAL.java</a>
                 </td>
                 <td>
                   0
@@ -17714,7 +17714,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.AbstractTestFSWAL.java">org/apache/hadoop/hbase/regionserver/wal/AbstractTestFSWAL.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.constraint.AllFailConstraint.java">org/apache/hadoop/hbase/constraint/AllFailConstraint.java</a>
                 </td>
                 <td>
                   0
@@ -19562,7 +19562,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.tool.CanaryStatusServlet.java">org/apache/hadoop/hbase/tool/CanaryStatusServlet.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.slowlog.SlowLogMasterService.java">org/apache/hadoop/hbase/master/slowlog/SlowLogMasterService.java</a>
                 </td>
                 <td>
                   0
@@ -19576,7 +19576,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.slowlog.SlowLogMasterService.java">org/apache/hadoop/hbase/master/slowlog/SlowLogMasterService.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.tool.CanaryStatusServlet.java">org/apache/hadoop/hbase/tool/CanaryStatusServlet.java</a>
                 </td>
                 <td>
                   0
@@ -20374,7 +20374,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.mob.TestMobUtils.java">org/apache/hadoop/hbase/mob/TestMobUtils.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestShutdownWhileWALBroken.java">org/apache/hadoop/hbase/regionserver/TestShutdownWhileWALBroken.java</a>
                 </td>
                 <td>
                   0
@@ -20388,7 +20388,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestShutdownWhileWALBroken.java">org/apache/hadoop/hbase/regionserver/TestShutdownWhileWALBroken.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.mob.TestMobUtils.java">org/apache/hadoop/hbase/mob/TestMobUtils.java</a>
                 </td>
                 <td>
                   0
@@ -21046,7 +21046,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestEncryptionKeyRotation.java">org/apache/hadoop/hbase/regionserver/TestEncryptionKeyRotation.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.procedure.SimpleRSProcedureManager.java">org/apache/hadoop/hbase/procedure/SimpleRSProcedureManager.java</a>
                 </td>
                 <td>
                   0
@@ -21055,12 +21055,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  2
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.procedure.SimpleRSProcedureManager.java">org/apache/hadoop/hbase/procedure/SimpleRSProcedureManager.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestEncryptionKeyRotation.java">org/apache/hadoop/hbase/regionserver/TestEncryptionKeyRotation.java</a>
                 </td>
                 <td>
                   0
@@ -21069,7 +21069,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  2
+                  0
                 </td>
               </tr>
                           <tr>
@@ -21578,7 +21578,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.FailedLogCloseException.java">org/apache/hadoop/hbase/regionserver/wal/FailedLogCloseException.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.TableNotEnabledException.java">org/apache/hadoop/hbase/TableNotEnabledException.java</a>
                 </td>
                 <td>
                   0
@@ -21592,7 +21592,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.TableNotEnabledException.java">org/apache/hadoop/hbase/TableNotEnabledException.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.FailedLogCloseException.java">org/apache/hadoop/hbase/regionserver/wal/FailedLogCloseException.java</a>
                 </td>
                 <td>
                   0
@@ -21718,7 +21718,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.coprocessor.RegionServerCoprocessor.java">org/apache/hadoop/hbase/coprocessor/RegionServerCoprocessor.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.cleaner.HFileCleaner.java">org/apache/hadoop/hbase/master/cleaner/HFileCleaner.java</a>
                 </td>
                 <td>
                   0
@@ -21732,7 +21732,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.cleaner.HFileCleaner.java">org/apache/hadoop/hbase/master/cleaner/HFileCleaner.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.coprocessor.RegionServerCoprocessor.java">org/apache/hadoop/hbase/coprocessor/RegionServerCoprocessor.java</a>
                 </td>
                 <td>
                   0
@@ -22208,7 +22208,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TracedAdvancedScanResultConsumer.java">org/apache/hadoop/hbase/client/TracedAdvancedScanResultConsumer.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestMasterTransitions.java">org/apache/hadoop/hbase/master/TestMasterTransitions.java</a>
                 </td>
                 <td>
                   0
@@ -22217,12 +22217,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  2
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestMasterTransitions.java">org/apache/hadoop/hbase/master/TestMasterTransitions.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TracedAdvancedScanResultConsumer.java">org/apache/hadoop/hbase/client/TracedAdvancedScanResultConsumer.java</a>
                 </td>
                 <td>
                   0
@@ -22231,7 +22231,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  2
+                  0
                 </td>
               </tr>
                           <tr>
@@ -23230,7 +23230,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.compress.HFileTestBase.java">org/apache/hadoop/hbase/io/compress/HFileTestBase.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestDataBlockEncodingTool.java">org/apache/hadoop/hbase/regionserver/TestDataBlockEncodingTool.java</a>
                 </td>
                 <td>
                   0
@@ -23244,7 +23244,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestDataBlockEncodingTool.java">org/apache/hadoop/hbase/regionserver/TestDataBlockEncodingTool.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.compress.HFileTestBase.java">org/apache/hadoop/hbase/io/compress/HFileTestBase.java</a>
                 </td>
                 <td>
                   0
@@ -23608,7 +23608,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.MemStoreLABImpl.java">org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.procedure.ProcedureCoordinator.java">org/apache/hadoop/hbase/procedure/ProcedureCoordinator.java</a>
                 </td>
                 <td>
                   0
@@ -23622,7 +23622,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.compactions.CompactionContext.java">org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.UserQuotaState.java">org/apache/hadoop/hbase/quotas/UserQuotaState.java</a>
                 </td>
                 <td>
                   0
@@ -23631,12 +23631,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  3
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.UserQuotaState.java">org/apache/hadoop/hbase/quotas/UserQuotaState.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.MemStoreLABImpl.java">org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.java</a>
                 </td>
                 <td>
                   0
@@ -23645,12 +23645,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  3
+                  0
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.procedure.ProcedureCoordinator.java">org/apache/hadoop/hbase/procedure/ProcedureCoordinator.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.compactions.CompactionContext.java">org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.java</a>
                 </td>
                 <td>
                   0
@@ -24028,7 +24028,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.KeyValueHeap.java">org/apache/hadoop/hbase/regionserver/KeyValueHeap.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.RegionsRecoveryChore.java">org/apache/hadoop/hbase/master/RegionsRecoveryChore.java</a>
                 </td>
                 <td>
                   0
@@ -24042,7 +24042,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.RegionsRecoveryChore.java">org/apache/hadoop/hbase/master/RegionsRecoveryChore.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.KeyValueHeap.java">org/apache/hadoop/hbase/regionserver/KeyValueHeap.java</a>
                 </td>
                 <td>
                   0
@@ -24868,7 +24868,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.wal.CompressedWALTestBase.java">org/apache/hadoop/hbase/wal/CompressedWALTestBase.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.mapreduce.MapreduceTestingShim.java">org/apache/hadoop/hbase/mapreduce/MapreduceTestingShim.java</a>
                 </td>
                 <td>
                   0
@@ -24877,12 +24877,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  1
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.mapreduce.MapreduceTestingShim.java">org/apache/hadoop/hbase/mapreduce/MapreduceTestingShim.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.wal.CompressedWALTestBase.java">org/apache/hadoop/hbase/wal/CompressedWALTestBase.java</a>
                 </td>
                 <td>
                   0
@@ -24891,7 +24891,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  0
                 </td>
               </tr>
                           <tr>
@@ -25414,7 +25414,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.namequeues.WALEventTrackerPayload.java">org/apache/hadoop/hbase/namequeues/WALEventTrackerPayload.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.FileArchiverNotifierFactoryImpl.java">org/apache/hadoop/hbase/quotas/FileArchiverNotifierFactoryImpl.java</a>
                 </td>
                 <td>
                   0
@@ -25428,7 +25428,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.FileArchiverNotifierFactoryImpl.java">org/apache/hadoop/hbase/quotas/FileArchiverNotifierFactoryImpl.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.namequeues.WALEventTrackerPayload.java">org/apache/hadoop/hbase/namequeues/WALEventTrackerPayload.java</a>
                 </td>
                 <td>
                   0
@@ -25470,7 +25470,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.coprocessor.TestRegionCoprocessorHost.java">org/apache/hadoop/hbase/coprocessor/TestRegionCoprocessorHost.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.TestReplicationWithWALExtendedAttributes.java">org/apache/hadoop/hbase/replication/TestReplicationWithWALExtendedAttributes.java</a>
                 </td>
                 <td>
                   0
@@ -25484,7 +25484,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.TestReplicationWithWALExtendedAttributes.java">org/apache/hadoop/hbase/replication/TestReplicationWithWALExtendedAttributes.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.coprocessor.TestRegionCoprocessorHost.java">org/apache/hadoop/hbase/coprocessor/TestRegionCoprocessorHost.java</a>
                 </td>
                 <td>
                   0
@@ -26198,7 +26198,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.TestClientClusterStatus.java">org/apache/hadoop/hbase/TestClientClusterStatus.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestHMasterCommandLine.java">org/apache/hadoop/hbase/master/TestHMasterCommandLine.java</a>
                 </td>
                 <td>
                   0
@@ -26212,7 +26212,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestHMasterCommandLine.java">org/apache/hadoop/hbase/master/TestHMasterCommandLine.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.TestClientClusterStatus.java">org/apache/hadoop/hbase/TestClientClusterStatus.java</a>
                 </td>
                 <td>
                   0
@@ -26800,7 +26800,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.security.access.TestCellACLWithMultipleVersions.java">org/apache/hadoop/hbase/security/access/TestCellACLWithMultipleVersions.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestRegionMove.java">org/apache/hadoop/hbase/regionserver/TestRegionMove.java</a>
                 </td>
                 <td>
                   0
@@ -26814,7 +26814,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestRegionMove.java">org/apache/hadoop/hbase/regionserver/TestRegionMove.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.security.access.TestCellACLWithMultipleVersions.java">org/apache/hadoop/hbase/security/access/TestCellACLWithMultipleVersions.java</a>
                 </td>
                 <td>
                   0
@@ -27514,7 +27514,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.hfile.ReaderContext.java">org/apache/hadoop/hbase/io/hfile/ReaderContext.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.MasterRpcServices.java">org/apache/hadoop/hbase/master/MasterRpcServices.java</a>
                 </td>
                 <td>
                   0
@@ -27528,7 +27528,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.MasterRpcServices.java">org/apache/hadoop/hbase/master/MasterRpcServices.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.hfile.ReaderContext.java">org/apache/hadoop/hbase/io/hfile/ReaderContext.java</a>
                 </td>
                 <td>
                   0
@@ -27962,7 +27962,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.coprocessor.TestMasterCoprocessorExceptionWithRemove.java">org/apache/hadoop/hbase/coprocessor/TestMasterCoprocessorExceptionWithRemove.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.multiwal.TestReplicationKillMasterRSCompressedWithMultipleWAL.java">org/apache/hadoop/hbase/replication/multiwal/TestReplicationKillMasterRSCompressedWithMultipleWAL.java</a>
                 </td>
                 <td>
                   0
@@ -27976,7 +27976,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.multiwal.TestReplicationKillMasterRSCompressedWithMultipleWAL.java">org/apache/hadoop/hbase/replication/multiwal/TestReplicationKillMasterRSCompressedWithMultipleWAL.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.coprocessor.TestMasterCoprocessorExceptionWithRemove.java">org/apache/hadoop/hbase/coprocessor/TestMasterCoprocessorExceptionWithRemove.java</a>
                 </td>
                 <td>
                   0
@@ -28242,7 +28242,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.util.ShutdownHookManager.java">org/apache/hadoop/hbase/util/ShutdownHookManager.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.FileSystemUtilizationChore.java">org/apache/hadoop/hbase/quotas/FileSystemUtilizationChore.java</a>
                 </td>
                 <td>
                   0
@@ -28251,12 +28251,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  0
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.FileSystemUtilizationChore.java">org/apache/hadoop/hbase/quotas/FileSystemUtilizationChore.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.util.ShutdownHookManager.java">org/apache/hadoop/hbase/util/ShutdownHookManager.java</a>
                 </td>
                 <td>
                   0
@@ -28265,7 +28265,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  1
                 </td>
               </tr>
                           <tr>
@@ -28379,20 +28379,6 @@ under the License.
                 <td>
                   0
                 </td>
-              </tr>
-                          <tr>
-                <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestClientOperationInterrupt.java">org/apache/hadoop/hbase/client/TestClientOperationInterrupt.java</a>
-                </td>
-                <td>
-                  0
-                </td>
-                <td>
-                  0
-                </td>
-                <td>
-                  0
-                </td>
               </tr>
                           <tr>
                 <td>
@@ -28407,6 +28393,20 @@ under the License.
                 <td>
                   0
                 </td>
+              </tr>
+                          <tr>
+                <td>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestClientOperationInterrupt.java">org/apache/hadoop/hbase/client/TestClientOperationInterrupt.java</a>
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
               </tr>
                           <tr>
                 <td>
@@ -29320,7 +29320,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.encoding.HFileBlockDefaultEncodingContext.java">org/apache/hadoop/hbase/io/encoding/HFileBlockDefaultEncodingContext.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.crypto.tls.HBaseTrustManager.java">org/apache/hadoop/hbase/io/crypto/tls/HBaseTrustManager.java</a>
                 </td>
                 <td>
                   0
@@ -29329,12 +29329,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  1
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.crypto.tls.HBaseTrustManager.java">org/apache/hadoop/hbase/io/crypto/tls/HBaseTrustManager.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.encoding.HFileBlockDefaultEncodingContext.java">org/apache/hadoop/hbase/io/encoding/HFileBlockDefaultEncodingContext.java</a>
                 </td>
                 <td>
                   0
@@ -29343,7 +29343,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  0
                 </td>
               </tr>
                           <tr>
@@ -29866,7 +29866,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.regionserver.RejectRequestsFromClientStateChecker.java">org/apache/hadoop/hbase/replication/regionserver/RejectRequestsFromClientStateChecker.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.CloseExcessRegionReplicasProcedure.java">org/apache/hadoop/hbase/master/procedure/CloseExcessRegionReplicasProcedure.java</a>
                 </td>
                 <td>
                   0
@@ -29880,7 +29880,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.CloseExcessRegionReplicasProcedure.java">org/apache/hadoop/hbase/master/procedure/CloseExcessRegionReplicasProcedure.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.regionserver.RejectRequestsFromClientStateChecker.java">org/apache/hadoop/hbase/replication/regionserver/RejectRequestsFromClientStateChecker.java</a>
                 </td>
                 <td>
                   0
@@ -29908,7 +29908,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestAsyncTableAdminApi2.java">org/apache/hadoop/hbase/client/TestAsyncTableAdminApi2.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestMasterRestartAfterDisablingTable.java">org/apache/hadoop/hbase/master/TestMasterRestartAfterDisablingTable.java</a>
                 </td>
                 <td>
                   0
@@ -29922,7 +29922,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestMasterRestartAfterDisablingTable.java">org/apache/hadoop/hbase/master/TestMasterRestartAfterDisablingTable.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestAsyncTableAdminApi2.java">org/apache/hadoop/hbase/client/TestAsyncTableAdminApi2.java</a>
                 </td>
                 <td>
                   0
@@ -29992,7 +29992,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.TestHeapSize.java">org/apache/hadoop/hbase/io/TestHeapSize.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.snapshot.TestSnapshotCleanupStateStore.java">org/apache/hadoop/hbase/master/snapshot/TestSnapshotCleanupStateStore.java</a>
                 </td>
                 <td>
                   0
@@ -30001,12 +30001,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  2
+                  0
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.snapshot.TestSnapshotCleanupStateStore.java">org/apache/hadoop/hbase/master/snapshot/TestSnapshotCleanupStateStore.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.TestHeapSize.java">org/apache/hadoop/hbase/io/TestHeapSize.java</a>
                 </td>
                 <td>
                   0
@@ -30015,7 +30015,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  2
                 </td>
               </tr>
                           <tr>
@@ -30216,7 +30216,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.security.access.TestWithDisabledAuthorization.java">org/apache/hadoop/hbase/security/access/TestWithDisabledAuthorization.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.TestAsyncFSWALDurability.java">org/apache/hadoop/hbase/regionserver/wal/TestAsyncFSWALDurability.java</a>
                 </td>
                 <td>
                   0
@@ -30225,12 +30225,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  6
+                  0
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.TestAsyncFSWALDurability.java">org/apache/hadoop/hbase/regionserver/wal/TestAsyncFSWALDurability.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.security.access.TestWithDisabledAuthorization.java">org/apache/hadoop/hbase/security/access/TestWithDisabledAuthorization.java</a>
                 </td>
                 <td>
                   0
@@ -30239,7 +30239,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  6
                 </td>
               </tr>
                           <tr>
@@ -31672,7 +31672,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.filter.TestSingleColumnValueExcludeFilter.java">org/apache/hadoop/hbase/filter/TestSingleColumnValueExcludeFilter.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.hfile.TestFixedFileTrailer.java">org/apache/hadoop/hbase/io/hfile/TestFixedFileTrailer.java</a>
                 </td>
                 <td>
                   0
@@ -31681,12 +31681,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  1
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.hfile.TestFixedFileTrailer.java">org/apache/hadoop/hbase/io/hfile/TestFixedFileTrailer.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.filter.TestSingleColumnValueExcludeFilter.java">org/apache/hadoop/hbase/filter/TestSingleColumnValueExcludeFilter.java</a>
                 </td>
                 <td>
                   0
@@ -31695,12 +31695,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  0
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.tool.TestSecureBulkLoadHFiles.java">org/apache/hadoop/hbase/tool/TestSecureBulkLoadHFiles.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.TestTableProcedureWaitingQueueCleanup.java">org/apache/hadoop/hbase/master/procedure/TestTableProcedureWaitingQueueCleanup.java</a>
                 </td>
                 <td>
                   0
@@ -31714,7 +31714,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.DummyAsyncClusterConnection.java">org/apache/hadoop/hbase/client/DummyAsyncClusterConnection.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.tool.TestSecureBulkLoadHFiles.java">org/apache/hadoop/hbase/tool/TestSecureBulkLoadHFiles.java</a>
                 </td>
                 <td>
                   0
@@ -31728,7 +31728,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.TestTableProcedureWaitingQueueCleanup.java">org/apache/hadoop/hbase/master/procedure/TestTableProcedureWaitingQueueCleanup.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.DummyAsyncClusterConnection.java">org/apache/hadoop/hbase/client/DummyAsyncClusterConnection.java</a>
                 </td>
                 <td>
                   0
@@ -32722,7 +32722,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.hfile.bucket.BucketCachePersister.java">org/apache/hadoop/hbase/io/hfile/bucket/BucketCachePersister.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest.java">org/apache/hadoop/hbase/regionserver/compactions/CompactionRequest.java</a>
                 </td>
                 <td>
                   0
@@ -32736,7 +32736,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest.java">org/apache/hadoop/hbase/regionserver/compactions/CompactionRequest.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.hfile.bucket.BucketCachePersister.java">org/apache/hadoop/hbase/io/hfile/bucket/BucketCachePersister.java</a>
                 </td>
                 <td>
                   0
@@ -33072,7 +33072,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.ipc.TestNettyIPCCloseConnection.java">org/apache/hadoop/hbase/ipc/TestNettyIPCCloseConnection.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestRestartWithEmptyWALDirectory.java">org/apache/hadoop/hbase/master/TestRestartWithEmptyWALDirectory.java</a>
                 </td>
                 <td>
                   0
@@ -33086,7 +33086,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestRestartWithEmptyWALDirectory.java">org/apache/hadoop/hbase/master/TestRestartWithEmptyWALDirectory.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.ipc.TestNettyIPCCloseConnection.java">org/apache/hadoop/hbase/ipc/TestNettyIPCCloseConnection.java</a>
                 </td>
                 <td>
                   0
@@ -33198,7 +33198,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.security.token.TokenUtil.java">org/apache/hadoop/hbase/security/token/TokenUtil.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil.java">org/apache/hadoop/hbase/master/procedure/MasterProcedureUtil.java</a>
                 </td>
                 <td>
                   0
@@ -33207,12 +33207,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  2
+                  1
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil.java">org/apache/hadoop/hbase/master/procedure/MasterProcedureUtil.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.security.token.TokenUtil.java">org/apache/hadoop/hbase/security/token/TokenUtil.java</a>
                 </td>
                 <td>
                   0
@@ -33221,7 +33221,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  2
                 </td>
               </tr>
                           <tr>
@@ -33548,7 +33548,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestScannerHeartbeatMessages.java">org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestClientMetaServiceRPCs.java">org/apache/hadoop/hbase/master/TestClientMetaServiceRPCs.java</a>
                 </td>
                 <td>
                   0
@@ -33557,12 +33557,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  4
+                  0
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestClientMetaServiceRPCs.java">org/apache/hadoop/hbase/master/TestClientMetaServiceRPCs.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestScannerHeartbeatMessages.java">org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.java</a>
                 </td>
                 <td>
                   0
@@ -33571,7 +33571,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  4
                 </td>
               </tr>
                           <tr>
@@ -34794,7 +34794,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.ipc.BalancedQueueRpcExecutor.java">org/apache/hadoop/hbase/ipc/BalancedQueueRpcExecutor.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.RecoverMetaProcedure.java">org/apache/hadoop/hbase/master/procedure/RecoverMetaProcedure.java</a>
                 </td>
                 <td>
                   0
@@ -34808,7 +34808,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.RecoverMetaProcedure.java">org/apache/hadoop/hbase/master/procedure/RecoverMetaProcedure.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.ipc.BalancedQueueRpcExecutor.java">org/apache/hadoop/hbase/ipc/BalancedQueueRpcExecutor.java</a>
                 </td>
                 <td>
                   0
@@ -36124,7 +36124,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestMetricsUserAggregate.java">org/apache/hadoop/hbase/regionserver/TestMetricsUserAggregate.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.balancer.RSGroupableBalancerTestBase.java">org/apache/hadoop/hbase/master/balancer/RSGroupableBalancerTestBase.java</a>
                 </td>
                 <td>
                   0
@@ -36138,7 +36138,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.balancer.RSGroupableBalancerTestBase.java">org/apache/hadoop/hbase/master/balancer/RSGroupableBalancerTestBase.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestMetricsUserAggregate.java">org/apache/hadoop/hbase/regionserver/TestMetricsUserAggregate.java</a>
                 </td>
                 <td>
                   0
@@ -36152,7 +36152,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.coprocessor.TestRegionObserverBypass.java">org/apache/hadoop/hbase/coprocessor/TestRegionObserverBypass.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestSeparateClientZKCluster.java">org/apache/hadoop/hbase/client/TestSeparateClientZKCluster.java</a>
                 </td>
                 <td>
                   0
@@ -36166,7 +36166,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestSeparateClientZKCluster.java">org/apache/hadoop/hbase/client/TestSeparateClientZKCluster.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.coprocessor.TestRegionObserverBypass.java">org/apache/hadoop/hbase/coprocessor/TestRegionObserverBypass.java</a>
                 </td>
                 <td>
                   0
@@ -37216,7 +37216,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.MemStoreSizing.java">org/apache/hadoop/hbase/regionserver/MemStoreSizing.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.procedure.Subprocedure.java">org/apache/hadoop/hbase/procedure/Subprocedure.java</a>
                 </td>
                 <td>
                   0
@@ -37230,7 +37230,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.procedure.Subprocedure.java">org/apache/hadoop/hbase/procedure/Subprocedure.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.MemStoreSizing.java">org/apache/hadoop/hbase/regionserver/MemStoreSizing.java</a>
                 </td>
                 <td>
                   0
@@ -37426,7 +37426,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.mob.TestExpiredMobFileCleaner.java">org/apache/hadoop/hbase/mob/TestExpiredMobFileCleaner.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.assignment.TestRaceBetweenSCPAndTRSP.java">org/apache/hadoop/hbase/master/assignment/TestRaceBetweenSCPAndTRSP.java</a>
                 </td>
                 <td>
                   0
@@ -37440,7 +37440,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.assignment.TestRaceBetweenSCPAndTRSP.java">org/apache/hadoop/hbase/master/assignment/TestRaceBetweenSCPAndTRSP.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.mob.TestExpiredMobFileCleaner.java">org/apache/hadoop/hbase/mob/TestExpiredMobFileCleaner.java</a>
                 </td>
                 <td>
                   0
@@ -37776,7 +37776,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.filter.TestMultipleColumnPrefixFilter.java">org/apache/hadoop/hbase/filter/TestMultipleColumnPrefixFilter.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.util.TestHBaseFsckEncryption.java">org/apache/hadoop/hbase/util/TestHBaseFsckEncryption.java</a>
                 </td>
                 <td>
                   0
@@ -37785,12 +37785,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  8
+                  0
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.util.TestHBaseFsckEncryption.java">org/apache/hadoop/hbase/util/TestHBaseFsckEncryption.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.filter.TestMultipleColumnPrefixFilter.java">org/apache/hadoop/hbase/filter/TestMultipleColumnPrefixFilter.java</a>
                 </td>
                 <td>
                   0
@@ -37799,7 +37799,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  8
                 </td>
               </tr>
                           <tr>
@@ -38364,7 +38364,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.regionserver.TestReplicationWALEdits.java">org/apache/hadoop/hbase/replication/regionserver/TestReplicationWALEdits.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.normalizer.TestSimpleRegionNormalizerOnCluster.java">org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizerOnCluster.java</a>
                 </td>
                 <td>
                   0
@@ -38378,7 +38378,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.normalizer.TestSimpleRegionNormalizerOnCluster.java">org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizerOnCluster.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.regionserver.TestReplicationWALEdits.java">org/apache/hadoop/hbase/replication/regionserver/TestReplicationWALEdits.java</a>
                 </td>
                 <td>
                   0
@@ -38392,7 +38392,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.wal.WALEditInternalHelper.java">org/apache/hadoop/hbase/wal/WALEditInternalHelper.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.MemStoreSnapshot.java">org/apache/hadoop/hbase/regionserver/MemStoreSnapshot.java</a>
                 </td>
                 <td>
                   0
@@ -38406,7 +38406,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.MemStoreSnapshot.java">org/apache/hadoop/hbase/regionserver/MemStoreSnapshot.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.wal.WALEditInternalHelper.java">org/apache/hadoop/hbase/wal/WALEditInternalHelper.java</a>
                 </td>
                 <td>
                   0
@@ -39358,7 +39358,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.StoreFile.java">org/apache/hadoop/hbase/regionserver/StoreFile.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.region.UpdateMasterRegion.java">org/apache/hadoop/hbase/master/region/UpdateMasterRegion.java</a>
                 </td>
                 <td>
                   0
@@ -39372,7 +39372,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.region.UpdateMasterRegion.java">org/apache/hadoop/hbase/master/region/UpdateMasterRegion.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.StoreFile.java">org/apache/hadoop/hbase/regionserver/StoreFile.java</a>
                 </td>
                 <td>
                   0
@@ -40016,7 +40016,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.wal.WALCorruptionDueToDanglingByteBufferTestBase.java">org/apache/hadoop/hbase/wal/WALCorruptionDueToDanglingByteBufferTestBase.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.TestMasterQuotasObserverWithMocks.java">org/apache/hadoop/hbase/quotas/TestMasterQuotasObserverWithMocks.java</a>
                 </td>
                 <td>
                   0
@@ -40030,7 +40030,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.TestMasterQuotasObserverWithMocks.java">org/apache/hadoop/hbase/quotas/TestMasterQuotasObserverWithMocks.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.wal.WALCorruptionDueToDanglingByteBufferTestBase.java">org/apache/hadoop/hbase/wal/WALCorruptionDueToDanglingByteBufferTestBase.java</a>
                 </td>
                 <td>
                   0
@@ -40072,7 +40072,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestRSQosFunction.java">org/apache/hadoop/hbase/regionserver/TestRSQosFunction.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestHRegionOnCluster.java">org/apache/hadoop/hbase/regionserver/TestHRegionOnCluster.java</a>
                 </td>
                 <td>
                   0
@@ -40081,12 +40081,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  2
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestHRegionOnCluster.java">org/apache/hadoop/hbase/regionserver/TestHRegionOnCluster.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestRSQosFunction.java">org/apache/hadoop/hbase/regionserver/TestRSQosFunction.java</a>
                 </td>
                 <td>
                   0
@@ -40095,7 +40095,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  2
+                  0
                 </td>
               </tr>
                           <tr>
@@ -40520,7 +40520,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.hfile.FixedFileTrailer.java">org/apache/hadoop/hbase/io/hfile/FixedFileTrailer.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.RegionSizeReportingChore.java">org/apache/hadoop/hbase/quotas/RegionSizeReportingChore.java</a>
                 </td>
                 <td>
                   0
@@ -40529,12 +40529,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  0
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.RegionSizeReportingChore.java">org/apache/hadoop/hbase/quotas/RegionSizeReportingChore.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.hfile.FixedFileTrailer.java">org/apache/hadoop/hbase/io/hfile/FixedFileTrailer.java</a>
                 </td>
                 <td>
                   0
@@ -40543,7 +40543,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  1
                 </td>
               </tr>
                           <tr>
@@ -40618,7 +40618,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestDefaultCompactSelection.java">org/apache/hadoop/hbase/regionserver/TestDefaultCompactSelection.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.TestAtomicReadQuota.java">org/apache/hadoop/hbase/quotas/TestAtomicReadQuota.java</a>
                 </td>
                 <td>
                   0
@@ -40632,7 +40632,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.TestAtomicReadQuota.java">org/apache/hadoop/hbase/quotas/TestAtomicReadQuota.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestDefaultCompactSelection.java">org/apache/hadoop/hbase/regionserver/TestDefaultCompactSelection.java</a>
                 </td>
                 <td>
                   0
@@ -41024,7 +41024,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.coprocessor.TestRegionServerCoprocessorExceptionWithAbort.java">org/apache/hadoop/hbase/coprocessor/TestRegionServerCoprocessorExceptionWithAbort.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestAsyncReplicationAdminApi.java">org/apache/hadoop/hbase/client/TestAsyncReplicationAdminApi.java</a>
                 </td>
                 <td>
                   0
@@ -41033,12 +41033,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  1
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestAsyncReplicationAdminApi.java">org/apache/hadoop/hbase/client/TestAsyncReplicationAdminApi.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.coprocessor.TestRegionServerCoprocessorExceptionWithAbort.java">org/apache/hadoop/hbase/coprocessor/TestRegionServerCoprocessorExceptionWithAbort.java</a>
                 </td>
                 <td>
                   0
@@ -41047,7 +41047,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  0
                 </td>
               </tr>
                           <tr>
@@ -41164,7 +41164,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.SecureWALCellCodec.java">org/apache/hadoop/hbase/regionserver/wal/SecureWALCellCodec.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.TableQuotaSnapshotStore.java">org/apache/hadoop/hbase/quotas/TableQuotaSnapshotStore.java</a>
                 </td>
                 <td>
                   0
@@ -41178,7 +41178,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.TableQuotaSnapshotStore.java">org/apache/hadoop/hbase/quotas/TableQuotaSnapshotStore.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.SecureWALCellCodec.java">org/apache/hadoop/hbase/regionserver/wal/SecureWALCellCodec.java</a>
                 </td>
                 <td>
                   0
@@ -42032,7 +42032,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.wal.WAL.java">org/apache/hadoop/hbase/wal/WAL.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.ServerListener.java">org/apache/hadoop/hbase/master/ServerListener.java</a>
                 </td>
                 <td>
                   0
@@ -42046,7 +42046,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.ServerListener.java">org/apache/hadoop/hbase/master/ServerListener.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.wal.WAL.java">org/apache/hadoop/hbase/wal/WAL.java</a>
                 </td>
                 <td>
                   0
@@ -42242,7 +42242,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestResultFromCoprocessor.java">org/apache/hadoop/hbase/client/TestResultFromCoprocessor.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.TestSCP.java">org/apache/hadoop/hbase/master/procedure/TestSCP.java</a>
                 </td>
                 <td>
                   0
@@ -42256,7 +42256,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.TestSCP.java">org/apache/hadoop/hbase/master/procedure/TestSCP.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestResultFromCoprocessor.java">org/apache/hadoop/hbase/client/TestResultFromCoprocessor.java</a>
                 </td>
                 <td>
                   0
@@ -43054,7 +43054,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.WriterOverAsyncWriter.java">org/apache/hadoop/hbase/regionserver/wal/WriterOverAsyncWriter.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.procedure.TestProcedureMember.java">org/apache/hadoop/hbase/procedure/TestProcedureMember.java</a>
                 </td>
                 <td>
                   0
@@ -43068,7 +43068,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.procedure.TestProcedureMember.java">org/apache/hadoop/hbase/procedure/TestProcedureMember.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.WriterOverAsyncWriter.java">org/apache/hadoop/hbase/regionserver/wal/WriterOverAsyncWriter.java</a>
                 </td>
                 <td>
                   0
@@ -43334,7 +43334,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.security.TestUsersOperationsWithSecureHadoop.java">org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.TestTruncateRegionProcedure.java">org/apache/hadoop/hbase/master/procedure/TestTruncateRegionProcedure.java</a>
                 </td>
                 <td>
                   0
@@ -43348,7 +43348,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.TestTruncateRegionProcedure.java">org/apache/hadoop/hbase/master/procedure/TestTruncateRegionProcedure.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.security.TestUsersOperationsWithSecureHadoop.java">org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.java</a>
                 </td>
                 <td>
                   0
@@ -43516,7 +43516,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.coprocessor.HasMasterServices.java">org/apache/hadoop/hbase/coprocessor/HasMasterServices.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.ReplicationBarrierFamilyFormat.java">org/apache/hadoop/hbase/replication/ReplicationBarrierFamilyFormat.java</a>
                 </td>
                 <td>
                   0
@@ -43530,7 +43530,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.ReplicationBarrierFamilyFormat.java">org/apache/hadoop/hbase/replication/ReplicationBarrierFamilyFormat.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.coprocessor.HasMasterServices.java">org/apache/hadoop/hbase/coprocessor/HasMasterServices.java</a>
                 </td>
                 <td>
                   0
@@ -44328,7 +44328,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.CellSink.java">org/apache/hadoop/hbase/regionserver/CellSink.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.assignment.ServerStateNode.java">org/apache/hadoop/hbase/master/assignment/ServerStateNode.java</a>
                 </td>
                 <td>
                   0
@@ -44342,7 +44342,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.assignment.ServerStateNode.java">org/apache/hadoop/hbase/master/assignment/ServerStateNode.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.CellSink.java">org/apache/hadoop/hbase/regionserver/CellSink.java</a>
                 </td>
                 <td>
                   0
@@ -46288,7 +46288,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.CompressionContext.java">org/apache/hadoop/hbase/regionserver/wal/CompressionContext.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.procedure.RegionServerProcedureManagerHost.java">org/apache/hadoop/hbase/procedure/RegionServerProcedureManagerHost.java</a>
                 </td>
                 <td>
                   0
@@ -46297,12 +46297,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  0
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.procedure.RegionServerProcedureManagerHost.java">org/apache/hadoop/hbase/procedure/RegionServerProcedureManagerHost.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.CompressionContext.java">org/apache/hadoop/hbase/regionserver/wal/CompressionContext.java</a>
                 </td>
                 <td>
                   0
@@ -46311,7 +46311,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  1
                 </td>
               </tr>
                           <tr>
@@ -46904,7 +46904,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.http.RegionReplicaInfo.java">org/apache/hadoop/hbase/master/http/RegionReplicaInfo.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.MasterWalManager.java">org/apache/hadoop/hbase/master/MasterWalManager.java</a>
                 </td>
                 <td>
                   0
@@ -46913,12 +46913,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  1
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.MasterWalManager.java">org/apache/hadoop/hbase/master/MasterWalManager.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.http.RegionReplicaInfo.java">org/apache/hadoop/hbase/master/http/RegionReplicaInfo.java</a>
                 </td>
                 <td>
                   0
@@ -46927,12 +46927,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  0
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestAsyncTableScannerCloseWhileSuspending.java">org/apache/hadoop/hbase/client/TestAsyncTableScannerCloseWhileSuspending.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.procedure.SimpleMasterProcedureManager.java">org/apache/hadoop/hbase/procedure/SimpleMasterProcedureManager.java</a>
                 </td>
                 <td>
                   0
@@ -46946,7 +46946,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.procedure.SimpleMasterProcedureManager.java">org/apache/hadoop/hbase/procedure/SimpleMasterProcedureManager.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestAsyncTableScannerCloseWhileSuspending.java">org/apache/hadoop/hbase/client/TestAsyncTableScannerCloseWhileSuspending.java</a>
                 </td>
                 <td>
                   0
@@ -47030,7 +47030,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestMobRestoreSnapshotFromClientAfterTruncate.java">org/apache/hadoop/hbase/client/TestMobRestoreSnapshotFromClientAfterTruncate.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestNewStartedRegionServerVersion.java">org/apache/hadoop/hbase/master/TestNewStartedRegionServerVersion.java</a>
                 </td>
                 <td>
                   0
@@ -47044,7 +47044,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestNewStartedRegionServerVersion.java">org/apache/hadoop/hbase/master/TestNewStartedRegionServerVersion.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestMobRestoreSnapshotFromClientAfterTruncate.java">org/apache/hadoop/hbase/client/TestMobRestoreSnapshotFromClientAfterTruncate.java</a>
                 </td>
                 <td>
                   0
@@ -47436,7 +47436,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestServerNonceManager.java">org/apache/hadoop/hbase/regionserver/TestServerNonceManager.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestWalAndCompactingMemStoreFlush.java">org/apache/hadoop/hbase/regionserver/TestWalAndCompactingMemStoreFlush.java</a>
                 </td>
                 <td>
                   0
@@ -47450,7 +47450,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestWalAndCompactingMemStoreFlush.java">org/apache/hadoop/hbase/regionserver/TestWalAndCompactingMemStoreFlush.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestServerNonceManager.java">org/apache/hadoop/hbase/regionserver/TestServerNonceManager.java</a>
                 </td>
                 <td>
                   0
@@ -47604,7 +47604,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.compactions.TestOffPeakHours.java">org/apache/hadoop/hbase/regionserver/compactions/TestOffPeakHours.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestMetaAssignmentWithStopMaster.java">org/apache/hadoop/hbase/master/TestMetaAssignmentWithStopMaster.java</a>
                 </td>
                 <td>
                   0
@@ -47618,7 +47618,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestMetaAssignmentWithStopMaster.java">org/apache/hadoop/hbase/master/TestMetaAssignmentWithStopMaster.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.compactions.TestOffPeakHours.java">org/apache/hadoop/hbase/regionserver/compactions/TestOffPeakHours.java</a>
                 </td>
                 <td>
                   0
@@ -50026,7 +50026,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.constraint.TestConstraint.java">org/apache/hadoop/hbase/constraint/TestConstraint.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.MockHStoreFile.java">org/apache/hadoop/hbase/regionserver/MockHStoreFile.java</a>
                 </td>
                 <td>
                   0
@@ -50040,7 +50040,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.MockHStoreFile.java">org/apache/hadoop/hbase/regionserver/MockHStoreFile.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.constraint.TestConstraint.java">org/apache/hadoop/hbase/constraint/TestConstraint.java</a>
                 </td>
                 <td>
                   0
@@ -50334,7 +50334,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.hfile.TestSeekTo.java">org/apache/hadoop/hbase/io/hfile/TestSeekTo.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.TestFSWALEntry.java">org/apache/hadoop/hbase/regionserver/wal/TestFSWALEntry.java</a>
                 </td>
                 <td>
                   0
@@ -50348,7 +50348,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.TestFSWALEntry.java">org/apache/hadoop/hbase/regionserver/wal/TestFSWALEntry.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.hfile.TestSeekTo.java">org/apache/hadoop/hbase/io/hfile/TestSeekTo.java</a>
                 </td>
                 <td>
                   0
@@ -51202,7 +51202,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.hfile.TestReseekTo.java">org/apache/hadoop/hbase/io/hfile/TestReseekTo.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.policies.TestNoInsertsViolationPolicyEnforcement.java">org/apache/hadoop/hbase/quotas/policies/TestNoInsertsViolationPolicyEnforcement.java</a>
                 </td>
                 <td>
                   0
@@ -51216,7 +51216,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.policies.TestNoInsertsViolationPolicyEnforcement.java">org/apache/hadoop/hbase/quotas/policies/TestNoInsertsViolationPolicyEnforcement.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.hfile.TestReseekTo.java">org/apache/hadoop/hbase/io/hfile/TestReseekTo.java</a>
                 </td>
                 <td>
                   0
@@ -51468,7 +51468,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestFSErrorsExposed.java">org/apache/hadoop/hbase/regionserver/TestFSErrorsExposed.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestRegionPlacement.java">org/apache/hadoop/hbase/master/TestRegionPlacement.java</a>
                 </td>
                 <td>
                   0
@@ -51477,12 +51477,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  0
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestRegionPlacement.java">org/apache/hadoop/hbase/master/TestRegionPlacement.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestFSErrorsExposed.java">org/apache/hadoop/hbase/regionserver/TestFSErrorsExposed.java</a>
                 </td>
                 <td>
                   0
@@ -51491,7 +51491,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  1
                 </td>
               </tr>
                           <tr>
@@ -52952,7 +52952,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.hfile.CacheStats.java">org/apache/hadoop/hbase/io/hfile/CacheStats.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.ClusterSchemaService.java">org/apache/hadoop/hbase/master/ClusterSchemaService.java</a>
                 </td>
                 <td>
                   0
@@ -52961,12 +52961,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  4
+                  0
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.ClusterSchemaService.java">org/apache/hadoop/hbase/master/ClusterSchemaService.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.hfile.CacheStats.java">org/apache/hadoop/hbase/io/hfile/CacheStats.java</a>
                 </td>
                 <td>
                   0
@@ -52975,7 +52975,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  4
                 </td>
               </tr>
                           <tr>
@@ -53260,7 +53260,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.http.TestHbckMetricsResource.java">org/apache/hadoop/hbase/master/http/TestHbckMetricsResource.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.TestSnapshotRegionProcedure.java">org/apache/hadoop/hbase/master/procedure/TestSnapshotRegionProcedure.java</a>
                 </td>
                 <td>
                   0
@@ -53274,7 +53274,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.TestSnapshotRegionProcedure.java">org/apache/hadoop/hbase/master/procedure/TestSnapshotRegionProcedure.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.http.TestHbckMetricsResource.java">org/apache/hadoop/hbase/master/http/TestHbckMetricsResource.java</a>
                 </td>
                 <td>
                   0
@@ -54184,7 +54184,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.MultiVersionConcurrencyControl.java">org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.RegionPlacementMaintainer.java">org/apache/hadoop/hbase/master/RegionPlacementMaintainer.java</a>
                 </td>
                 <td>
                   0
@@ -54193,12 +54193,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  6
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.RegionPlacementMaintainer.java">org/apache/hadoop/hbase/master/RegionPlacementMaintainer.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.MultiVersionConcurrencyControl.java">org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.java</a>
                 </td>
                 <td>
                   0
@@ -54207,7 +54207,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  6
+                  0
                 </td>
               </tr>
                           <tr>
@@ -55640,7 +55640,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestMvccConsistentScanner.java">org/apache/hadoop/hbase/client/TestMvccConsistentScanner.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.TestFlushTableProcedureBase.java">org/apache/hadoop/hbase/master/procedure/TestFlushTableProcedureBase.java</a>
                 </td>
                 <td>
                   0
@@ -55654,7 +55654,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.TestFlushTableProcedureBase.java">org/apache/hadoop/hbase/master/procedure/TestFlushTableProcedureBase.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestMvccConsistentScanner.java">org/apache/hadoop/hbase/client/TestMvccConsistentScanner.java</a>
                 </td>
                 <td>
                   0
@@ -56074,7 +56074,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.filter.TestColumnRangeFilter.java">org/apache/hadoop/hbase/filter/TestColumnRangeFilter.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.TestSyncReplicationStandbyFSHLog.java">org/apache/hadoop/hbase/replication/TestSyncReplicationStandbyFSHLog.java</a>
                 </td>
                 <td>
                   0
@@ -56083,12 +56083,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  0
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.TestSyncReplicationStandbyFSHLog.java">org/apache/hadoop/hbase/replication/TestSyncReplicationStandbyFSHLog.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.filter.TestColumnRangeFilter.java">org/apache/hadoop/hbase/filter/TestColumnRangeFilter.java</a>
                 </td>
                 <td>
                   0
@@ -56097,7 +56097,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  1
                 </td>
               </tr>
                           <tr>
@@ -56172,7 +56172,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.ipc.TestSecurityRpcSentBytesMetrics.java">org/apache/hadoop/hbase/ipc/TestSecurityRpcSentBytesMetrics.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.StatefulStoreMockMaker.java">org/apache/hadoop/hbase/regionserver/StatefulStoreMockMaker.java</a>
                 </td>
                 <td>
                   0
@@ -56186,7 +56186,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.StatefulStoreMockMaker.java">org/apache/hadoop/hbase/regionserver/StatefulStoreMockMaker.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.ipc.TestSecurityRpcSentBytesMetrics.java">org/apache/hadoop/hbase/ipc/TestSecurityRpcSentBytesMetrics.java</a>
                 </td>
                 <td>
                   0
@@ -57026,7 +57026,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.AbstractStateMachineRegionProcedure.java">org/apache/hadoop/hbase/master/procedure/AbstractStateMachineRegionProcedure.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.CreateNamespaceProcedure.java">org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.java</a>
                 </td>
                 <td>
                   0
@@ -57040,7 +57040,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.CreateNamespaceProcedure.java">org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.AbstractStateMachineRegionProcedure.java">org/apache/hadoop/hbase/master/procedure/AbstractStateMachineRegionProcedure.java</a>
                 </td>
                 <td>
                   0
@@ -57586,7 +57586,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.compactions.PerfTestCompactionPolicies.java">org/apache/hadoop/hbase/regionserver/compactions/PerfTestCompactionPolicies.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestWarmupRegion.java">org/apache/hadoop/hbase/master/TestWarmupRegion.java</a>
                 </td>
                 <td>
                   0
@@ -57595,12 +57595,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  4
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestWarmupRegion.java">org/apache/hadoop/hbase/master/TestWarmupRegion.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.compactions.PerfTestCompactionPolicies.java">org/apache/hadoop/hbase/regionserver/compactions/PerfTestCompactionPolicies.java</a>
                 </td>
                 <td>
                   0
@@ -57609,7 +57609,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  4
+                  0
                 </td>
               </tr>
                           <tr>
@@ -58006,7 +58006,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestCacheOnWriteInSchema.java">org/apache/hadoop/hbase/regionserver/TestCacheOnWriteInSchema.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestSeekOptimizations.java">org/apache/hadoop/hbase/regionserver/TestSeekOptimizations.java</a>
                 </td>
                 <td>
                   0
@@ -58015,12 +58015,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  2
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestBlocksRead.java">org/apache/hadoop/hbase/regionserver/TestBlocksRead.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestCacheOnWriteInSchema.java">org/apache/hadoop/hbase/regionserver/TestCacheOnWriteInSchema.java</a>
                 </td>
                 <td>
                   0
@@ -58034,7 +58034,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestSeekOptimizations.java">org/apache/hadoop/hbase/regionserver/TestSeekOptimizations.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestBlocksRead.java">org/apache/hadoop/hbase/regionserver/TestBlocksRead.java</a>
                 </td>
                 <td>
                   0
@@ -58043,7 +58043,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  2
+                  0
                 </td>
               </tr>
                           <tr>
@@ -58888,7 +58888,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestMutationGetCellBuilder.java">org/apache/hadoop/hbase/client/TestMutationGetCellBuilder.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestSplitOrMergeStatus.java">org/apache/hadoop/hbase/client/TestSplitOrMergeStatus.java</a>
                 </td>
                 <td>
                   0
@@ -58902,7 +58902,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestSplitOrMergeStatus.java">org/apache/hadoop/hbase/client/TestSplitOrMergeStatus.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestMutationGetCellBuilder.java">org/apache/hadoop/hbase/client/TestMutationGetCellBuilder.java</a>
                 </td>
                 <td>
                   0
@@ -59616,7 +59616,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.security.SaslChallengeDecoder.java">org/apache/hadoop/hbase/security/SaslChallengeDecoder.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.snapshot.SnapshotCreationException.java">org/apache/hadoop/hbase/snapshot/SnapshotCreationException.java</a>
                 </td>
                 <td>
                   0
@@ -59630,7 +59630,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.snapshot.SnapshotCreationException.java">org/apache/hadoop/hbase/snapshot/SnapshotCreationException.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.security.SaslChallengeDecoder.java">org/apache/hadoop/hbase/security/SaslChallengeDecoder.java</a>
                 </td>
                 <td>
                   0
@@ -60428,7 +60428,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestSplitWithBlockingFiles.java">org/apache/hadoop/hbase/regionserver/TestSplitWithBlockingFiles.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestSplitOrMergeStateStore.java">org/apache/hadoop/hbase/master/TestSplitOrMergeStateStore.java</a>
                 </td>
                 <td>
                   0
@@ -60442,7 +60442,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestSplitOrMergeStateStore.java">org/apache/hadoop/hbase/master/TestSplitOrMergeStateStore.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestSplitWithBlockingFiles.java">org/apache/hadoop/hbase/regionserver/TestSplitWithBlockingFiles.java</a>
                 </td>
                 <td>
                   0
@@ -60750,7 +60750,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.filter.TestRegexComparator.java">org/apache/hadoop/hbase/filter/TestRegexComparator.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestMetaReplicasAddressChange.java">org/apache/hadoop/hbase/client/TestMetaReplicasAddressChange.java</a>
                 </td>
                 <td>
                   0
@@ -60759,12 +60759,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  2
+                  0
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestMetaReplicasAddressChange.java">org/apache/hadoop/hbase/client/TestMetaReplicasAddressChange.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.filter.TestRegexComparator.java">org/apache/hadoop/hbase/filter/TestRegexComparator.java</a>
                 </td>
                 <td>
                   0
@@ -60773,7 +60773,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  2
                 </td>
               </tr>
                           <tr>
@@ -61422,7 +61422,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.hfile.HFileWriterImpl.java">org/apache/hadoop/hbase/io/hfile/HFileWriterImpl.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.PeerQueue.java">org/apache/hadoop/hbase/master/procedure/PeerQueue.java</a>
                 </td>
                 <td>
                   0
@@ -61436,7 +61436,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.PeerQueue.java">org/apache/hadoop/hbase/master/procedure/PeerQueue.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.hfile.HFileWriterImpl.java">org/apache/hadoop/hbase/io/hfile/HFileWriterImpl.java</a>
                 </td>
                 <td>
                   0
@@ -62346,7 +62346,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.wal.OutputSink.java">org/apache/hadoop/hbase/wal/OutputSink.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.balancer.BalancerChore.java">org/apache/hadoop/hbase/master/balancer/BalancerChore.java</a>
                 </td>
                 <td>
                   0
@@ -62360,7 +62360,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.balancer.BalancerChore.java">org/apache/hadoop/hbase/master/balancer/BalancerChore.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.wal.OutputSink.java">org/apache/hadoop/hbase/wal/OutputSink.java</a>
                 </td>
                 <td>
                   0
@@ -62640,7 +62640,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.util.FSRegionScanner.java">org/apache/hadoop/hbase/util/FSRegionScanner.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.SpaceViolationPolicyEnforcement.java">org/apache/hadoop/hbase/quotas/SpaceViolationPolicyEnforcement.java</a>
                 </td>
                 <td>
                   0
@@ -62654,7 +62654,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.SpaceViolationPolicyEnforcement.java">org/apache/hadoop/hbase/quotas/SpaceViolationPolicyEnforcement.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.util.FSRegionScanner.java">org/apache/hadoop/hbase/util/FSRegionScanner.java</a>
                 </td>
                 <td>
                   0
@@ -63816,7 +63816,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.mob.ManualMobMaintHFileCleaner.java">org/apache/hadoop/hbase/mob/ManualMobMaintHFileCleaner.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.StoreFileScanner.java">org/apache/hadoop/hbase/regionserver/StoreFileScanner.java</a>
                 </td>
                 <td>
                   0
@@ -63825,12 +63825,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  4
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.StoreFileScanner.java">org/apache/hadoop/hbase/regionserver/StoreFileScanner.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.mob.ManualMobMaintHFileCleaner.java">org/apache/hadoop/hbase/mob/ManualMobMaintHFileCleaner.java</a>
                 </td>
                 <td>
                   0
@@ -63839,7 +63839,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  4
+                  0
                 </td>
               </tr>
                           <tr>
@@ -64040,7 +64040,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.ipc.FastPathRWQueueRpcExecutor.java">org/apache/hadoop/hbase/ipc/FastPathRWQueueRpcExecutor.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.ChunkCreator.java">org/apache/hadoop/hbase/regionserver/ChunkCreator.java</a>
                 </td>
                 <td>
                   0
@@ -64049,12 +64049,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  1
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.ChunkCreator.java">org/apache/hadoop/hbase/regionserver/ChunkCreator.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.ipc.FastPathRWQueueRpcExecutor.java">org/apache/hadoop/hbase/ipc/FastPathRWQueueRpcExecutor.java</a>
                 </td>
                 <td>
                   0
@@ -64063,7 +64063,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  0
                 </td>
               </tr>
                           <tr>
@@ -64292,7 +64292,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.wal.TestWALSplitValueCompression.java">org/apache/hadoop/hbase/wal/TestWALSplitValueCompression.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.monitoring.TestTaskMonitor.java">org/apache/hadoop/hbase/monitoring/TestTaskMonitor.java</a>
                 </td>
                 <td>
                   0
@@ -64306,7 +64306,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.monitoring.TestTaskMonitor.java">org/apache/hadoop/hbase/monitoring/TestTaskMonitor.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.wal.TestWALSplitValueCompression.java">org/apache/hadoop/hbase/wal/TestWALSplitValueCompression.java</a>
                 </td>
                 <td>
                   0
@@ -64320,7 +64320,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.storefiletracker.StoreFileTracker.java">org/apache/hadoop/hbase/regionserver/storefiletracker/StoreFileTracker.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.cleaner.TimeToLiveProcedureWALCleaner.java">org/apache/hadoop/hbase/master/cleaner/TimeToLiveProcedureWALCleaner.java</a>
                 </td>
                 <td>
                   0
@@ -64334,7 +64334,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.cleaner.TimeToLiveProcedureWALCleaner.java">org/apache/hadoop/hbase/master/cleaner/TimeToLiveProcedureWALCleaner.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.storefiletracker.StoreFileTracker.java">org/apache/hadoop/hbase/regionserver/storefiletracker/StoreFileTracker.java</a>
                 </td>
                 <td>
                   0
@@ -64852,7 +64852,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.filter.TestFilterFromRegionSide.java">org/apache/hadoop/hbase/filter/TestFilterFromRegionSide.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.filter.TestFilterListOnMini.java">org/apache/hadoop/hbase/filter/TestFilterListOnMini.java</a>
                 </td>
                 <td>
                   0
@@ -64866,7 +64866,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.filter.TestFilterListOnMini.java">org/apache/hadoop/hbase/filter/TestFilterListOnMini.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.filter.TestFilterFromRegionSide.java">org/apache/hadoop/hbase/filter/TestFilterFromRegionSide.java</a>
                 </td>
                 <td>
                   0
@@ -65594,7 +65594,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.compactions.TestStripeCompactor.java">org/apache/hadoop/hbase/regionserver/compactions/TestStripeCompactor.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.TestSnapshotQuotaObserverChore.java">org/apache/hadoop/hbase/quotas/TestSnapshotQuotaObserverChore.java</a>
                 </td>
                 <td>
                   0
@@ -65608,7 +65608,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.TestSnapshotQuotaObserverChore.java">org/apache/hadoop/hbase/quotas/TestSnapshotQuotaObserverChore.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.compactions.TestStripeCompactor.java">org/apache/hadoop/hbase/regionserver/compactions/TestStripeCompactor.java</a>
                 </td>
                 <td>
                   0
@@ -66896,7 +66896,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.mob.DefaultMobStoreFlusher.java">org/apache/hadoop/hbase/mob/DefaultMobStoreFlusher.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.JMXListener.java">org/apache/hadoop/hbase/JMXListener.java</a>
                 </td>
                 <td>
                   0
@@ -66905,12 +66905,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  0
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.JMXListener.java">org/apache/hadoop/hbase/JMXListener.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.mob.DefaultMobStoreFlusher.java">org/apache/hadoop/hbase/mob/DefaultMobStoreFlusher.java</a>
                 </td>
                 <td>
                   0
@@ -66919,7 +66919,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  1
                 </td>
               </tr>
                           <tr>
@@ -67064,7 +67064,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.wal.NamespaceGroupingStrategy.java">org/apache/hadoop/hbase/wal/NamespaceGroupingStrategy.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.ActiveMasterManager.java">org/apache/hadoop/hbase/master/ActiveMasterManager.java</a>
                 </td>
                 <td>
                   0
@@ -67078,7 +67078,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.ActiveMasterManager.java">org/apache/hadoop/hbase/master/ActiveMasterManager.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.wal.NamespaceGroupingStrategy.java">org/apache/hadoop/hbase/wal/NamespaceGroupingStrategy.java</a>
                 </td>
                 <td>
                   0
@@ -67106,7 +67106,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.filter.TestPrefixFilter.java">org/apache/hadoop/hbase/filter/TestPrefixFilter.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestDateTieredCompactionPolicyOverflow.java">org/apache/hadoop/hbase/regionserver/TestDateTieredCompactionPolicyOverflow.java</a>
                 </td>
                 <td>
                   0
@@ -67120,7 +67120,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestDateTieredCompactionPolicyOverflow.java">org/apache/hadoop/hbase/regionserver/TestDateTieredCompactionPolicyOverflow.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.filter.TestPrefixFilter.java">org/apache/hadoop/hbase/filter/TestPrefixFilter.java</a>
                 </td>
                 <td>
                   0
@@ -67764,7 +67764,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.ProtobufLogTestHelper.java">org/apache/hadoop/hbase/regionserver/wal/ProtobufLogTestHelper.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.TestSnapshotProcedureRSCrashes.java">org/apache/hadoop/hbase/master/procedure/TestSnapshotProcedureRSCrashes.java</a>
                 </td>
                 <td>
                   0
@@ -67778,7 +67778,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.TestSnapshotProcedureRSCrashes.java">org/apache/hadoop/hbase/master/procedure/TestSnapshotProcedureRSCrashes.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.ProtobufLogTestHelper.java">org/apache/hadoop/hbase/regionserver/wal/ProtobufLogTestHelper.java</a>
                 </td>
                 <td>
                   0
@@ -67876,7 +67876,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestSimpleTimeRangeTracker.java">org/apache/hadoop/hbase/regionserver/TestSimpleTimeRangeTracker.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.assignment.TestRogueRSAssignment.java">org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.java</a>
                 </td>
                 <td>
                   0
@@ -67890,7 +67890,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.assignment.TestRogueRSAssignment.java">org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestSimpleTimeRangeTracker.java">org/apache/hadoop/hbase/regionserver/TestSimpleTimeRangeTracker.java</a>
                 </td>
                 <td>
                   0
@@ -67988,7 +67988,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.snapshot.FlushSnapshotSubprocedure.java">org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.cleaner.DirScanPool.java">org/apache/hadoop/hbase/master/cleaner/DirScanPool.java</a>
                 </td>
                 <td>
                   0
@@ -67997,12 +67997,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  1
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.cleaner.DirScanPool.java">org/apache/hadoop/hbase/master/cleaner/DirScanPool.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.snapshot.FlushSnapshotSubprocedure.java">org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.java</a>
                 </td>
                 <td>
                   0
@@ -68011,7 +68011,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  0
                 </td>
               </tr>
                           <tr>
@@ -69150,7 +69150,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestCleanupCompactedFileOnRegionClose.java">org/apache/hadoop/hbase/regionserver/TestCleanupCompactedFileOnRegionClose.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.TestModifyNamespaceProcedure.java">org/apache/hadoop/hbase/master/procedure/TestModifyNamespaceProcedure.java</a>
                 </td>
                 <td>
                   0
@@ -69164,7 +69164,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.procedure.TestModifyNamespaceProcedure.java">org/apache/hadoop/hbase/master/procedure/TestModifyNamespaceProcedure.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestCleanupCompactedFileOnRegionClose.java">org/apache/hadoop/hbase/regionserver/TestCleanupCompactedFileOnRegionClose.java</a>
                 </td>
                 <td>
                   0
@@ -69458,7 +69458,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.hfile.ResizableBlockCache.java">org/apache/hadoop/hbase/io/hfile/ResizableBlockCache.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshotNotifierFactory.java">org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshotNotifierFactory.java</a>
                 </td>
                 <td>
                   0
@@ -69467,12 +69467,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  1
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshotNotifierFactory.java">org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshotNotifierFactory.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.hfile.ResizableBlockCache.java">org/apache/hadoop/hbase/io/hfile/ResizableBlockCache.java</a>
                 </td>
                 <td>
                   0
@@ -69481,7 +69481,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  0
                 </td>
               </tr>
                           <tr>
@@ -70116,7 +70116,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.ipc.Call.java">org/apache/hadoop/hbase/ipc/Call.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.ZooKeeperConnectionException.java">org/apache/hadoop/hbase/ZooKeeperConnectionException.java</a>
                 </td>
                 <td>
                   0
@@ -70130,7 +70130,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.ZooKeeperConnectionException.java">org/apache/hadoop/hbase/ZooKeeperConnectionException.java</a>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.ipc.Call.java">org/apache/hadoop/hbase/ipc/Call.java</a>
                 </td>
                 <td>
                   0
diff --git a/coc.html b/coc.html
index 8252970e0d9..356a8615f20 100644
--- a/coc.html
+++ b/coc.html
@@ -252,7 +252,7 @@ email to <a class="externalLink" href="mailto:private@hbase.apache.org">the priv
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2024-11-22
+        Last Published: 2024-11-26
       </div>
         </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>
... 119967 lines suppressed ...