<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) -->
<title>Source code</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="source: package: org.apache.hadoop.hbase, class: KeyValue, class: KeyOnlyKeyValue">
<meta name="generator" content="javadoc/SourceToHTMLConverter">
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
</head>
<body class="source-page">
<main role="main">
<div class="source-container">
<pre><span class="source-line-no">001</span><span id="line-1">/*</span>
<span class="source-line-no">002</span><span id="line-2"> * Licensed to the Apache Software Foundation (ASF) under one</span>
<span class="source-line-no">003</span><span id="line-3"> * or more contributor license agreements.  See the NOTICE file</span>
<span class="source-line-no">004</span><span id="line-4"> * distributed with this work for additional information</span>
<span class="source-line-no">005</span><span id="line-5"> * regarding copyright ownership.  The ASF licenses this file</span>
<span class="source-line-no">006</span><span id="line-6"> * to you under the Apache License, Version 2.0 (the</span>
<span class="source-line-no">007</span><span id="line-7"> * "License"); you may not use this file except in compliance</span>
<span class="source-line-no">008</span><span id="line-8"> * with the License.  You may obtain a copy of the License at</span>
<span class="source-line-no">009</span><span id="line-9"> *</span>
<span class="source-line-no">010</span><span id="line-10"> *     http://www.apache.org/licenses/LICENSE-2.0</span>
<span class="source-line-no">011</span><span id="line-11"> *</span>
<span class="source-line-no">012</span><span id="line-12"> * Unless required by applicable law or agreed to in writing, software</span>
<span class="source-line-no">013</span><span id="line-13"> * distributed under the License is distributed on an "AS IS" BASIS,</span>
<span class="source-line-no">014</span><span id="line-14"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
<span class="source-line-no">015</span><span id="line-15"> * See the License for the specific language governing permissions and</span>
<span class="source-line-no">016</span><span id="line-16"> * limitations under the License.</span>
<span class="source-line-no">017</span><span id="line-17"> */</span>
<span class="source-line-no">018</span><span id="line-18">package org.apache.hadoop.hbase;</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 static org.apache.hadoop.hbase.util.Bytes.len;</span>
<span class="source-line-no">021</span><span id="line-21"></span>
<span class="source-line-no">022</span><span id="line-22">import java.io.DataInput;</span>
<span class="source-line-no">023</span><span id="line-23">import java.io.DataOutput;</span>
<span class="source-line-no">024</span><span id="line-24">import java.io.IOException;</span>
<span class="source-line-no">025</span><span id="line-25">import java.io.OutputStream;</span>
<span class="source-line-no">026</span><span id="line-26">import java.nio.ByteBuffer;</span>
<span class="source-line-no">027</span><span id="line-27">import java.util.ArrayList;</span>
<span class="source-line-no">028</span><span id="line-28">import java.util.Arrays;</span>
<span class="source-line-no">029</span><span id="line-29">import java.util.HashMap;</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;</span>
<span class="source-line-no">033</span><span id="line-33">import org.apache.hadoop.hbase.util.ByteBufferUtils;</span>
<span class="source-line-no">034</span><span id="line-34">import org.apache.hadoop.hbase.util.Bytes;</span>
<span class="source-line-no">035</span><span id="line-35">import org.apache.hadoop.hbase.util.ClassSize;</span>
<span class="source-line-no">036</span><span id="line-36">import org.apache.yetus.audience.InterfaceAudience;</span>
<span class="source-line-no">037</span><span id="line-37">import org.slf4j.Logger;</span>
<span class="source-line-no">038</span><span id="line-38">import org.slf4j.LoggerFactory;</span>
<span class="source-line-no">039</span><span id="line-39"></span>
<span class="source-line-no">040</span><span id="line-40">/**</span>
<span class="source-line-no">041</span><span id="line-41"> * An HBase Key/Value. This is the fundamental HBase Type.</span>
<span class="source-line-no">042</span><span id="line-42"> * &lt;p&gt;</span>
<span class="source-line-no">043</span><span id="line-43"> * HBase applications and users should use the Cell interface and avoid directly using KeyValue and</span>
<span class="source-line-no">044</span><span id="line-44"> * member functions not defined in Cell.</span>
<span class="source-line-no">045</span><span id="line-45"> * &lt;p&gt;</span>
<span class="source-line-no">046</span><span id="line-46"> * If being used client-side, the primary methods to access individual fields are</span>
<span class="source-line-no">047</span><span id="line-47"> * {@link #getRowArray()}, {@link #getFamilyArray()}, {@link #getQualifierArray()},</span>
<span class="source-line-no">048</span><span id="line-48"> * {@link #getTimestamp()}, and {@link #getValueArray()}. These methods allocate new byte arrays and</span>
<span class="source-line-no">049</span><span id="line-49"> * return copies. Avoid their use server-side.</span>
<span class="source-line-no">050</span><span id="line-50"> * &lt;p&gt;</span>
<span class="source-line-no">051</span><span id="line-51"> * Instances of this class are immutable. They do not implement Comparable but Comparators are</span>
<span class="source-line-no">052</span><span id="line-52"> * provided. Comparators change with context, whether user table or a catalog table comparison. Its</span>
<span class="source-line-no">053</span><span id="line-53"> * critical you use the appropriate comparator. There are Comparators for normal HFiles, Meta's</span>
<span class="source-line-no">054</span><span id="line-54"> * Hfiles, and bloom filter keys.</span>
<span class="source-line-no">055</span><span id="line-55"> * &lt;p&gt;</span>
<span class="source-line-no">056</span><span id="line-56"> * KeyValue wraps a byte array and takes offsets and lengths into passed array at where to start</span>
<span class="source-line-no">057</span><span id="line-57"> * interpreting the content as KeyValue. The KeyValue format inside a byte array is:</span>
<span class="source-line-no">058</span><span id="line-58"> * &lt;code&gt;&amp;lt;keylength&amp;gt; &amp;lt;valuelength&amp;gt; &amp;lt;key&amp;gt; &amp;lt;value&amp;gt;&lt;/code&gt; Key is further</span>
<span class="source-line-no">059</span><span id="line-59"> * decomposed as: &lt;code&gt;&amp;lt;rowlength&amp;gt; &amp;lt;row&amp;gt; &amp;lt;columnfamilylength&amp;gt;</span>
<span class="source-line-no">060</span><span id="line-60"> * &amp;lt;columnfamily&amp;gt; &amp;lt;columnqualifier&amp;gt;</span>
<span class="source-line-no">061</span><span id="line-61"> * &amp;lt;timestamp&amp;gt; &amp;lt;keytype&amp;gt;&lt;/code&gt; The &lt;code&gt;rowlength&lt;/code&gt; maximum is</span>
<span class="source-line-no">062</span><span id="line-62"> * &lt;code&gt;Short.MAX_SIZE&lt;/code&gt;, column family length maximum is &lt;code&gt;Byte.MAX_SIZE&lt;/code&gt;, and</span>
<span class="source-line-no">063</span><span id="line-63"> * column qualifier + key length must be &amp;lt; &lt;code&gt;Integer.MAX_SIZE&lt;/code&gt;. The column does not</span>
<span class="source-line-no">064</span><span id="line-64"> * contain the family/qualifier delimiter, {@link #COLUMN_FAMILY_DELIMITER}&lt;br&gt;</span>
<span class="source-line-no">065</span><span id="line-65"> * KeyValue can optionally contain Tags. When it contains tags, it is added in the byte array after</span>
<span class="source-line-no">066</span><span id="line-66"> * the value part. The format for this part is: &lt;code&gt;&amp;lt;tagslength&amp;gt;&amp;lt;tagsbytes&amp;gt;&lt;/code&gt;.</span>
<span class="source-line-no">067</span><span id="line-67"> * &lt;code&gt;tagslength&lt;/code&gt; maximum is &lt;code&gt;Short.MAX_SIZE&lt;/code&gt;. The &lt;code&gt;tagsbytes&lt;/code&gt;</span>
<span class="source-line-no">068</span><span id="line-68"> * contain one or more tags where as each tag is of the form</span>
<span class="source-line-no">069</span><span id="line-69"> * &lt;code&gt;&amp;lt;taglength&amp;gt;&amp;lt;tagtype&amp;gt;&amp;lt;tagbytes&amp;gt;&lt;/code&gt;. &lt;code&gt;tagtype&lt;/code&gt; is one byte</span>
<span class="source-line-no">070</span><span id="line-70"> * and &lt;code&gt;taglength&lt;/code&gt; maximum is &lt;code&gt;Short.MAX_SIZE&lt;/code&gt; and it includes 1 byte type</span>
<span class="source-line-no">071</span><span id="line-71"> * length and actual tag bytes length.</span>
<span class="source-line-no">072</span><span id="line-72"> */</span>
<span class="source-line-no">073</span><span id="line-73">@InterfaceAudience.Private</span>
<span class="source-line-no">074</span><span id="line-74">public class KeyValue implements ExtendedCell, Cloneable {</span>
<span class="source-line-no">075</span><span id="line-75">  private static final Logger LOG = LoggerFactory.getLogger(KeyValue.class);</span>
<span class="source-line-no">076</span><span id="line-76"></span>
<span class="source-line-no">077</span><span id="line-77">  public static final int FIXED_OVERHEAD = ClassSize.OBJECT + // the KeyValue object itself</span>
<span class="source-line-no">078</span><span id="line-78">    ClassSize.REFERENCE + // pointer to "bytes"</span>
<span class="source-line-no">079</span><span id="line-79">    2 * Bytes.SIZEOF_INT + // offset, length</span>
<span class="source-line-no">080</span><span id="line-80">    Bytes.SIZEOF_LONG;// memstoreTS</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">   * Colon character in UTF-8</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 final char COLUMN_FAMILY_DELIMITER = ':';</span>
<span class="source-line-no">086</span><span id="line-86"></span>
<span class="source-line-no">087</span><span id="line-87">  public static final byte[] COLUMN_FAMILY_DELIM_ARRAY = new byte[] { COLUMN_FAMILY_DELIMITER };</span>
<span class="source-line-no">088</span><span id="line-88"></span>
<span class="source-line-no">089</span><span id="line-89">  /** Size of the key length field in bytes */</span>
<span class="source-line-no">090</span><span id="line-90">  public static final int KEY_LENGTH_SIZE = Bytes.SIZEOF_INT;</span>
<span class="source-line-no">091</span><span id="line-91"></span>
<span class="source-line-no">092</span><span id="line-92">  /** Size of the key type field in bytes */</span>
<span class="source-line-no">093</span><span id="line-93">  public static final int TYPE_SIZE = Bytes.SIZEOF_BYTE;</span>
<span class="source-line-no">094</span><span id="line-94"></span>
<span class="source-line-no">095</span><span id="line-95">  /** Size of the row length field in bytes */</span>
<span class="source-line-no">096</span><span id="line-96">  public static final int ROW_LENGTH_SIZE = Bytes.SIZEOF_SHORT;</span>
<span class="source-line-no">097</span><span id="line-97"></span>
<span class="source-line-no">098</span><span id="line-98">  /** Size of the family length field in bytes */</span>
<span class="source-line-no">099</span><span id="line-99">  public static final int FAMILY_LENGTH_SIZE = Bytes.SIZEOF_BYTE;</span>
<span class="source-line-no">100</span><span id="line-100"></span>
<span class="source-line-no">101</span><span id="line-101">  /** Size of the timestamp field in bytes */</span>
<span class="source-line-no">102</span><span id="line-102">  public static final int TIMESTAMP_SIZE = Bytes.SIZEOF_LONG;</span>
<span class="source-line-no">103</span><span id="line-103"></span>
<span class="source-line-no">104</span><span id="line-104">  // Size of the timestamp and type byte on end of a key -- a long + a byte.</span>
<span class="source-line-no">105</span><span id="line-105">  public static final int TIMESTAMP_TYPE_SIZE = TIMESTAMP_SIZE + TYPE_SIZE;</span>
<span class="source-line-no">106</span><span id="line-106"></span>
<span class="source-line-no">107</span><span id="line-107">  // Size of the length shorts and bytes in key.</span>
<span class="source-line-no">108</span><span id="line-108">  public static final int KEY_INFRASTRUCTURE_SIZE =</span>
<span class="source-line-no">109</span><span id="line-109">    ROW_LENGTH_SIZE + FAMILY_LENGTH_SIZE + TIMESTAMP_TYPE_SIZE;</span>
<span class="source-line-no">110</span><span id="line-110"></span>
<span class="source-line-no">111</span><span id="line-111">  // How far into the key the row starts at. First thing to read is the short</span>
<span class="source-line-no">112</span><span id="line-112">  // that says how long the row is.</span>
<span class="source-line-no">113</span><span id="line-113">  public static final int ROW_OFFSET =</span>
<span class="source-line-no">114</span><span id="line-114">    Bytes.SIZEOF_INT /* keylength */ + Bytes.SIZEOF_INT /* valuelength */;</span>
<span class="source-line-no">115</span><span id="line-115"></span>
<span class="source-line-no">116</span><span id="line-116">  public static final int ROW_KEY_OFFSET = ROW_OFFSET + ROW_LENGTH_SIZE;</span>
<span class="source-line-no">117</span><span id="line-117"></span>
<span class="source-line-no">118</span><span id="line-118">  // Size of the length ints in a KeyValue datastructure.</span>
<span class="source-line-no">119</span><span id="line-119">  public static final int KEYVALUE_INFRASTRUCTURE_SIZE = ROW_OFFSET;</span>
<span class="source-line-no">120</span><span id="line-120"></span>
<span class="source-line-no">121</span><span id="line-121">  /** Size of the tags length field in bytes */</span>
<span class="source-line-no">122</span><span id="line-122">  public static final int TAGS_LENGTH_SIZE = Bytes.SIZEOF_SHORT;</span>
<span class="source-line-no">123</span><span id="line-123"></span>
<span class="source-line-no">124</span><span id="line-124">  public static final int KEYVALUE_WITH_TAGS_INFRASTRUCTURE_SIZE = ROW_OFFSET + TAGS_LENGTH_SIZE;</span>
<span class="source-line-no">125</span><span id="line-125"></span>
<span class="source-line-no">126</span><span id="line-126">  /**</span>
<span class="source-line-no">127</span><span id="line-127">   * Computes the number of bytes that a &lt;code&gt;KeyValue&lt;/code&gt; instance with the provided</span>
<span class="source-line-no">128</span><span id="line-128">   * characteristics would take up for its underlying data structure.</span>
<span class="source-line-no">129</span><span id="line-129">   * @param rlength row length</span>
<span class="source-line-no">130</span><span id="line-130">   * @param flength family length</span>
<span class="source-line-no">131</span><span id="line-131">   * @param qlength qualifier length</span>
<span class="source-line-no">132</span><span id="line-132">   * @param vlength value length</span>
<span class="source-line-no">133</span><span id="line-133">   * @return the &lt;code&gt;KeyValue&lt;/code&gt; data structure length</span>
<span class="source-line-no">134</span><span id="line-134">   */</span>
<span class="source-line-no">135</span><span id="line-135">  public static long getKeyValueDataStructureSize(int rlength, int flength, int qlength,</span>
<span class="source-line-no">136</span><span id="line-136">    int vlength) {</span>
<span class="source-line-no">137</span><span id="line-137">    return KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE</span>
<span class="source-line-no">138</span><span id="line-138">      + getKeyDataStructureSize(rlength, flength, qlength) + vlength;</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">  /**</span>
<span class="source-line-no">142</span><span id="line-142">   * Computes the number of bytes that a &lt;code&gt;KeyValue&lt;/code&gt; instance with the provided</span>
<span class="source-line-no">143</span><span id="line-143">   * characteristics would take up for its underlying data structure.</span>
<span class="source-line-no">144</span><span id="line-144">   * @param rlength    row length</span>
<span class="source-line-no">145</span><span id="line-145">   * @param flength    family length</span>
<span class="source-line-no">146</span><span id="line-146">   * @param qlength    qualifier length</span>
<span class="source-line-no">147</span><span id="line-147">   * @param vlength    value length</span>
<span class="source-line-no">148</span><span id="line-148">   * @param tagsLength total length of the tags</span>
<span class="source-line-no">149</span><span id="line-149">   * @return the &lt;code&gt;KeyValue&lt;/code&gt; data structure length</span>
<span class="source-line-no">150</span><span id="line-150">   */</span>
<span class="source-line-no">151</span><span id="line-151">  public static long getKeyValueDataStructureSize(int rlength, int flength, int qlength,</span>
<span class="source-line-no">152</span><span id="line-152">    int vlength, int tagsLength) {</span>
<span class="source-line-no">153</span><span id="line-153">    if (tagsLength == 0) {</span>
<span class="source-line-no">154</span><span id="line-154">      return getKeyValueDataStructureSize(rlength, flength, qlength, vlength);</span>
<span class="source-line-no">155</span><span id="line-155">    }</span>
<span class="source-line-no">156</span><span id="line-156">    return KeyValue.KEYVALUE_WITH_TAGS_INFRASTRUCTURE_SIZE</span>
<span class="source-line-no">157</span><span id="line-157">      + getKeyDataStructureSize(rlength, flength, qlength) + vlength + tagsLength;</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">  /**</span>
<span class="source-line-no">161</span><span id="line-161">   * Computes the number of bytes that a &lt;code&gt;KeyValue&lt;/code&gt; instance with the provided</span>
<span class="source-line-no">162</span><span id="line-162">   * characteristics would take up for its underlying data structure.</span>
<span class="source-line-no">163</span><span id="line-163">   * @param klength    key length</span>
<span class="source-line-no">164</span><span id="line-164">   * @param vlength    value length</span>
<span class="source-line-no">165</span><span id="line-165">   * @param tagsLength total length of the tags</span>
<span class="source-line-no">166</span><span id="line-166">   * @return the &lt;code&gt;KeyValue&lt;/code&gt; data structure length</span>
<span class="source-line-no">167</span><span id="line-167">   */</span>
<span class="source-line-no">168</span><span id="line-168">  public static long getKeyValueDataStructureSize(int klength, int vlength, int tagsLength) {</span>
<span class="source-line-no">169</span><span id="line-169">    if (tagsLength == 0) {</span>
<span class="source-line-no">170</span><span id="line-170">      return (long) KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE + klength + vlength;</span>
<span class="source-line-no">171</span><span id="line-171">    }</span>
<span class="source-line-no">172</span><span id="line-172">    return (long) KeyValue.KEYVALUE_WITH_TAGS_INFRASTRUCTURE_SIZE + klength + vlength + tagsLength;</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">  /**</span>
<span class="source-line-no">176</span><span id="line-176">   * Computes the number of bytes that a &lt;code&gt;KeyValue&lt;/code&gt; instance with the provided</span>
<span class="source-line-no">177</span><span id="line-177">   * characteristics would take up in its underlying data structure for the key.</span>
<span class="source-line-no">178</span><span id="line-178">   * @param rlength row length</span>
<span class="source-line-no">179</span><span id="line-179">   * @param flength family length</span>
<span class="source-line-no">180</span><span id="line-180">   * @param qlength qualifier length</span>
<span class="source-line-no">181</span><span id="line-181">   * @return the key data structure length</span>
<span class="source-line-no">182</span><span id="line-182">   */</span>
<span class="source-line-no">183</span><span id="line-183">  public static long getKeyDataStructureSize(int rlength, int flength, int qlength) {</span>
<span class="source-line-no">184</span><span id="line-184">    return (long) KeyValue.KEY_INFRASTRUCTURE_SIZE + rlength + flength + qlength;</span>
<span class="source-line-no">185</span><span id="line-185">  }</span>
<span class="source-line-no">186</span><span id="line-186"></span>
<span class="source-line-no">187</span><span id="line-187">  /**</span>
<span class="source-line-no">188</span><span id="line-188">   * Key type. Has space for other key types to be added later. Cannot rely on enum ordinals . They</span>
<span class="source-line-no">189</span><span id="line-189">   * change if item is removed or moved. Do our own codes.</span>
<span class="source-line-no">190</span><span id="line-190">   */</span>
<span class="source-line-no">191</span><span id="line-191">  public static enum Type {</span>
<span class="source-line-no">192</span><span id="line-192">    Minimum((byte) 0),</span>
<span class="source-line-no">193</span><span id="line-193">    Put((byte) 4),</span>
<span class="source-line-no">194</span><span id="line-194"></span>
<span class="source-line-no">195</span><span id="line-195">    Delete((byte) 8),</span>
<span class="source-line-no">196</span><span id="line-196">    DeleteFamilyVersion((byte) 10),</span>
<span class="source-line-no">197</span><span id="line-197">    DeleteColumn((byte) 12),</span>
<span class="source-line-no">198</span><span id="line-198">    DeleteFamily((byte) 14),</span>
<span class="source-line-no">199</span><span id="line-199"></span>
<span class="source-line-no">200</span><span id="line-200">    // Maximum is used when searching; you look from maximum on down.</span>
<span class="source-line-no">201</span><span id="line-201">    Maximum((byte) 255);</span>
<span class="source-line-no">202</span><span id="line-202"></span>
<span class="source-line-no">203</span><span id="line-203">    private final byte code;</span>
<span class="source-line-no">204</span><span id="line-204"></span>
<span class="source-line-no">205</span><span id="line-205">    Type(final byte c) {</span>
<span class="source-line-no">206</span><span id="line-206">      this.code = c;</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">    public byte getCode() {</span>
<span class="source-line-no">210</span><span id="line-210">      return this.code;</span>
<span class="source-line-no">211</span><span id="line-211">    }</span>
<span class="source-line-no">212</span><span id="line-212"></span>
<span class="source-line-no">213</span><span id="line-213">    private static Type[] codeArray = new Type[256];</span>
<span class="source-line-no">214</span><span id="line-214"></span>
<span class="source-line-no">215</span><span id="line-215">    static {</span>
<span class="source-line-no">216</span><span id="line-216">      for (Type t : Type.values()) {</span>
<span class="source-line-no">217</span><span id="line-217">        codeArray[t.code &amp; 0xff] = t;</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"></span>
<span class="source-line-no">221</span><span id="line-221">    /**</span>
<span class="source-line-no">222</span><span id="line-222">     * True to indicate that the byte b is a valid type.</span>
<span class="source-line-no">223</span><span id="line-223">     * @param b byte to check</span>
<span class="source-line-no">224</span><span id="line-224">     * @return true or false</span>
<span class="source-line-no">225</span><span id="line-225">     */</span>
<span class="source-line-no">226</span><span id="line-226">    static boolean isValidType(byte b) {</span>
<span class="source-line-no">227</span><span id="line-227">      return codeArray[b &amp; 0xff] != null;</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">    /**</span>
<span class="source-line-no">231</span><span id="line-231">     * Cannot rely on enum ordinals . They change if item is removed or moved. Do our own codes.</span>
<span class="source-line-no">232</span><span id="line-232">     * @param b the kv serialized byte[] to process</span>
<span class="source-line-no">233</span><span id="line-233">     * @return Type associated with passed code.</span>
<span class="source-line-no">234</span><span id="line-234">     */</span>
<span class="source-line-no">235</span><span id="line-235">    public static Type codeToType(final byte b) {</span>
<span class="source-line-no">236</span><span id="line-236">      Type t = codeArray[b &amp; 0xff];</span>
<span class="source-line-no">237</span><span id="line-237">      if (t != null) {</span>
<span class="source-line-no">238</span><span id="line-238">        return t;</span>
<span class="source-line-no">239</span><span id="line-239">      }</span>
<span class="source-line-no">240</span><span id="line-240">      throw new RuntimeException("Unknown code " + b);</span>
<span class="source-line-no">241</span><span id="line-241">    }</span>
<span class="source-line-no">242</span><span id="line-242">  }</span>
<span class="source-line-no">243</span><span id="line-243"></span>
<span class="source-line-no">244</span><span id="line-244">  /**</span>
<span class="source-line-no">245</span><span id="line-245">   * Lowest possible key. Makes a Key with highest possible Timestamp, empty row and column. No key</span>
<span class="source-line-no">246</span><span id="line-246">   * can be equal or lower than this one in memstore or in store file.</span>
<span class="source-line-no">247</span><span id="line-247">   */</span>
<span class="source-line-no">248</span><span id="line-248">  public static final KeyValue LOWESTKEY =</span>
<span class="source-line-no">249</span><span id="line-249">    new KeyValue(HConstants.EMPTY_BYTE_ARRAY, HConstants.LATEST_TIMESTAMP);</span>
<span class="source-line-no">250</span><span id="line-250"></span>
<span class="source-line-no">251</span><span id="line-251">  ////</span>
<span class="source-line-no">252</span><span id="line-252">  // KeyValue core instance fields.</span>
<span class="source-line-no">253</span><span id="line-253">  protected byte[] bytes = null; // an immutable byte array that contains the KV</span>
<span class="source-line-no">254</span><span id="line-254">  protected int offset = 0; // offset into bytes buffer KV starts at</span>
<span class="source-line-no">255</span><span id="line-255">  protected int length = 0; // length of the KV starting from offset.</span>
<span class="source-line-no">256</span><span id="line-256"></span>
<span class="source-line-no">257</span><span id="line-257">  /** Here be dragons **/</span>
<span class="source-line-no">258</span><span id="line-258"></span>
<span class="source-line-no">259</span><span id="line-259">  /**</span>
<span class="source-line-no">260</span><span id="line-260">   * used to achieve atomic operations in the memstore.</span>
<span class="source-line-no">261</span><span id="line-261">   */</span>
<span class="source-line-no">262</span><span id="line-262">  @Override</span>
<span class="source-line-no">263</span><span id="line-263">  public long getSequenceId() {</span>
<span class="source-line-no">264</span><span id="line-264">    return seqId;</span>
<span class="source-line-no">265</span><span id="line-265">  }</span>
<span class="source-line-no">266</span><span id="line-266"></span>
<span class="source-line-no">267</span><span id="line-267">  @Override</span>
<span class="source-line-no">268</span><span id="line-268">  public void setSequenceId(long seqId) {</span>
<span class="source-line-no">269</span><span id="line-269">    this.seqId = seqId;</span>
<span class="source-line-no">270</span><span id="line-270">  }</span>
<span class="source-line-no">271</span><span id="line-271"></span>
<span class="source-line-no">272</span><span id="line-272">  // multi-version concurrency control version. default value is 0, aka do not care.</span>
<span class="source-line-no">273</span><span id="line-273">  private long seqId = 0;</span>
<span class="source-line-no">274</span><span id="line-274"></span>
<span class="source-line-no">275</span><span id="line-275">  /** Dragon time over, return to normal business */</span>
<span class="source-line-no">276</span><span id="line-276"></span>
<span class="source-line-no">277</span><span id="line-277">  /** Writable Constructor -- DO NOT USE */</span>
<span class="source-line-no">278</span><span id="line-278">  public KeyValue() {</span>
<span class="source-line-no">279</span><span id="line-279">  }</span>
<span class="source-line-no">280</span><span id="line-280"></span>
<span class="source-line-no">281</span><span id="line-281">  /**</span>
<span class="source-line-no">282</span><span id="line-282">   * Creates a KeyValue from the start of the specified byte array. Presumes &lt;code&gt;bytes&lt;/code&gt;</span>
<span class="source-line-no">283</span><span id="line-283">   * content is formatted as a KeyValue blob.</span>
<span class="source-line-no">284</span><span id="line-284">   * @param bytes byte array</span>
<span class="source-line-no">285</span><span id="line-285">   */</span>
<span class="source-line-no">286</span><span id="line-286">  public KeyValue(final byte[] bytes) {</span>
<span class="source-line-no">287</span><span id="line-287">    this(bytes, 0);</span>
<span class="source-line-no">288</span><span id="line-288">  }</span>
<span class="source-line-no">289</span><span id="line-289"></span>
<span class="source-line-no">290</span><span id="line-290">  /**</span>
<span class="source-line-no">291</span><span id="line-291">   * Creates a KeyValue from the specified byte array and offset. Presumes &lt;code&gt;bytes&lt;/code&gt;</span>
<span class="source-line-no">292</span><span id="line-292">   * content starting at &lt;code&gt;offset&lt;/code&gt; is formatted as a KeyValue blob.</span>
<span class="source-line-no">293</span><span id="line-293">   * @param bytes  byte array</span>
<span class="source-line-no">294</span><span id="line-294">   * @param offset offset to start of KeyValue</span>
<span class="source-line-no">295</span><span id="line-295">   */</span>
<span class="source-line-no">296</span><span id="line-296">  public KeyValue(final byte[] bytes, final int offset) {</span>
<span class="source-line-no">297</span><span id="line-297">    this(bytes, offset, getLength(bytes, offset));</span>
<span class="source-line-no">298</span><span id="line-298">  }</span>
<span class="source-line-no">299</span><span id="line-299"></span>
<span class="source-line-no">300</span><span id="line-300">  /**</span>
<span class="source-line-no">301</span><span id="line-301">   * Creates a KeyValue from the specified byte array, starting at offset, and for length</span>
<span class="source-line-no">302</span><span id="line-302">   * &lt;code&gt;length&lt;/code&gt;.</span>
<span class="source-line-no">303</span><span id="line-303">   * @param bytes  byte array</span>
<span class="source-line-no">304</span><span id="line-304">   * @param offset offset to start of the KeyValue</span>
<span class="source-line-no">305</span><span id="line-305">   * @param length length of the KeyValue</span>
<span class="source-line-no">306</span><span id="line-306">   */</span>
<span class="source-line-no">307</span><span id="line-307">  public KeyValue(final byte[] bytes, final int offset, final int length) {</span>
<span class="source-line-no">308</span><span id="line-308">    KeyValueUtil.checkKeyValueBytes(bytes, offset, length, true);</span>
<span class="source-line-no">309</span><span id="line-309">    this.bytes = bytes;</span>
<span class="source-line-no">310</span><span id="line-310">    this.offset = offset;</span>
<span class="source-line-no">311</span><span id="line-311">    this.length = length;</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">   * Creates a KeyValue from the specified byte array, starting at offset, and for length</span>
<span class="source-line-no">316</span><span id="line-316">   * &lt;code&gt;length&lt;/code&gt;.</span>
<span class="source-line-no">317</span><span id="line-317">   * @param bytes  byte array</span>
<span class="source-line-no">318</span><span id="line-318">   * @param offset offset to start of the KeyValue</span>
<span class="source-line-no">319</span><span id="line-319">   * @param length length of the KeyValue</span>
<span class="source-line-no">320</span><span id="line-320">   * @param ts     timestamp</span>
<span class="source-line-no">321</span><span id="line-321">   */</span>
<span class="source-line-no">322</span><span id="line-322">  public KeyValue(final byte[] bytes, final int offset, final int length, long ts) {</span>
<span class="source-line-no">323</span><span id="line-323">    this(bytes, offset, length, null, 0, 0, null, 0, 0, ts, Type.Maximum, null, 0, 0, null);</span>
<span class="source-line-no">324</span><span id="line-324">  }</span>
<span class="source-line-no">325</span><span id="line-325"></span>
<span class="source-line-no">326</span><span id="line-326">  /** Constructors that build a new backing byte array from fields */</span>
<span class="source-line-no">327</span><span id="line-327"></span>
<span class="source-line-no">328</span><span id="line-328">  /**</span>
<span class="source-line-no">329</span><span id="line-329">   * Constructs KeyValue structure filled with null value. Sets type to</span>
<span class="source-line-no">330</span><span id="line-330">   * {@link KeyValue.Type#Maximum}</span>
<span class="source-line-no">331</span><span id="line-331">   * @param row       - row key (arbitrary byte array)</span>
<span class="source-line-no">332</span><span id="line-332">   * @param timestamp version timestamp</span>
<span class="source-line-no">333</span><span id="line-333">   */</span>
<span class="source-line-no">334</span><span id="line-334">  public KeyValue(final byte[] row, final long timestamp) {</span>
<span class="source-line-no">335</span><span id="line-335">    this(row, null, null, timestamp, Type.Maximum, null);</span>
<span class="source-line-no">336</span><span id="line-336">  }</span>
<span class="source-line-no">337</span><span id="line-337"></span>
<span class="source-line-no">338</span><span id="line-338">  /**</span>
<span class="source-line-no">339</span><span id="line-339">   * Constructs KeyValue structure filled with null value.</span>
<span class="source-line-no">340</span><span id="line-340">   * @param row       - row key (arbitrary byte array)</span>
<span class="source-line-no">341</span><span id="line-341">   * @param timestamp version timestamp</span>
<span class="source-line-no">342</span><span id="line-342">   */</span>
<span class="source-line-no">343</span><span id="line-343">  public KeyValue(final byte[] row, final long timestamp, Type type) {</span>
<span class="source-line-no">344</span><span id="line-344">    this(row, null, null, timestamp, type, null);</span>
<span class="source-line-no">345</span><span id="line-345">  }</span>
<span class="source-line-no">346</span><span id="line-346"></span>
<span class="source-line-no">347</span><span id="line-347">  /**</span>
<span class="source-line-no">348</span><span id="line-348">   * Constructs KeyValue structure filled with null value. Sets type to</span>
<span class="source-line-no">349</span><span id="line-349">   * {@link KeyValue.Type#Maximum}</span>
<span class="source-line-no">350</span><span id="line-350">   * @param row       - row key (arbitrary byte array)</span>
<span class="source-line-no">351</span><span id="line-351">   * @param family    family name</span>
<span class="source-line-no">352</span><span id="line-352">   * @param qualifier column qualifier</span>
<span class="source-line-no">353</span><span id="line-353">   */</span>
<span class="source-line-no">354</span><span id="line-354">  public KeyValue(final byte[] row, final byte[] family, final byte[] qualifier) {</span>
<span class="source-line-no">355</span><span id="line-355">    this(row, family, qualifier, HConstants.LATEST_TIMESTAMP, Type.Maximum);</span>
<span class="source-line-no">356</span><span id="line-356">  }</span>
<span class="source-line-no">357</span><span id="line-357"></span>
<span class="source-line-no">358</span><span id="line-358">  /**</span>
<span class="source-line-no">359</span><span id="line-359">   * Constructs KeyValue structure as a put filled with specified values and LATEST_TIMESTAMP.</span>
<span class="source-line-no">360</span><span id="line-360">   * @param row       - row key (arbitrary byte array)</span>
<span class="source-line-no">361</span><span id="line-361">   * @param family    family name</span>
<span class="source-line-no">362</span><span id="line-362">   * @param qualifier column qualifier</span>
<span class="source-line-no">363</span><span id="line-363">   */</span>
<span class="source-line-no">364</span><span id="line-364">  public KeyValue(final byte[] row, final byte[] family, final byte[] qualifier,</span>
<span class="source-line-no">365</span><span id="line-365">    final byte[] value) {</span>
<span class="source-line-no">366</span><span id="line-366">    this(row, family, qualifier, HConstants.LATEST_TIMESTAMP, Type.Put, value);</span>
<span class="source-line-no">367</span><span id="line-367">  }</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">   * Constructs KeyValue structure filled with specified values.</span>
<span class="source-line-no">371</span><span id="line-371">   * @param row       row key</span>
<span class="source-line-no">372</span><span id="line-372">   * @param family    family name</span>
<span class="source-line-no">373</span><span id="line-373">   * @param qualifier column qualifier</span>
<span class="source-line-no">374</span><span id="line-374">   * @param timestamp version timestamp</span>
<span class="source-line-no">375</span><span id="line-375">   * @param type      key type</span>
<span class="source-line-no">376</span><span id="line-376">   * @throws IllegalArgumentException an illegal value was passed</span>
<span class="source-line-no">377</span><span id="line-377">   */</span>
<span class="source-line-no">378</span><span id="line-378">  public KeyValue(final byte[] row, final byte[] family, final byte[] qualifier,</span>
<span class="source-line-no">379</span><span id="line-379">    final long timestamp, Type type) {</span>
<span class="source-line-no">380</span><span id="line-380">    this(row, family, qualifier, timestamp, type, null);</span>
<span class="source-line-no">381</span><span id="line-381">  }</span>
<span class="source-line-no">382</span><span id="line-382"></span>
<span class="source-line-no">383</span><span id="line-383">  /**</span>
<span class="source-line-no">384</span><span id="line-384">   * Constructs KeyValue structure filled with specified values.</span>
<span class="source-line-no">385</span><span id="line-385">   * @param row       row key</span>
<span class="source-line-no">386</span><span id="line-386">   * @param family    family name</span>
<span class="source-line-no">387</span><span id="line-387">   * @param qualifier column qualifier</span>
<span class="source-line-no">388</span><span id="line-388">   * @param timestamp version timestamp</span>
<span class="source-line-no">389</span><span id="line-389">   * @param value     column value</span>
<span class="source-line-no">390</span><span id="line-390">   * @throws IllegalArgumentException an illegal value was passed</span>
<span class="source-line-no">391</span><span id="line-391">   */</span>
<span class="source-line-no">392</span><span id="line-392">  public KeyValue(final byte[] row, final byte[] family, final byte[] qualifier,</span>
<span class="source-line-no">393</span><span id="line-393">    final long timestamp, final byte[] value) {</span>
<span class="source-line-no">394</span><span id="line-394">    this(row, family, qualifier, timestamp, Type.Put, value);</span>
<span class="source-line-no">395</span><span id="line-395">  }</span>
<span class="source-line-no">396</span><span id="line-396"></span>
<span class="source-line-no">397</span><span id="line-397">  /**</span>
<span class="source-line-no">398</span><span id="line-398">   * Constructs KeyValue structure filled with specified values.</span>
<span class="source-line-no">399</span><span id="line-399">   * @param row       row key</span>
<span class="source-line-no">400</span><span id="line-400">   * @param family    family name</span>
<span class="source-line-no">401</span><span id="line-401">   * @param qualifier column qualifier</span>
<span class="source-line-no">402</span><span id="line-402">   * @param timestamp version timestamp</span>
<span class="source-line-no">403</span><span id="line-403">   * @param value     column value</span>
<span class="source-line-no">404</span><span id="line-404">   * @param tags      tags</span>
<span class="source-line-no">405</span><span id="line-405">   * @throws IllegalArgumentException an illegal value was passed</span>
<span class="source-line-no">406</span><span id="line-406">   */</span>
<span class="source-line-no">407</span><span id="line-407">  public KeyValue(final byte[] row, final byte[] family, final byte[] qualifier,</span>
<span class="source-line-no">408</span><span id="line-408">    final long timestamp, final byte[] value, final Tag[] tags) {</span>
<span class="source-line-no">409</span><span id="line-409">    this(row, family, qualifier, timestamp, value, tags != null ? Arrays.asList(tags) : null);</span>
<span class="source-line-no">410</span><span id="line-410">  }</span>
<span class="source-line-no">411</span><span id="line-411"></span>
<span class="source-line-no">412</span><span id="line-412">  /**</span>
<span class="source-line-no">413</span><span id="line-413">   * Constructs KeyValue structure filled with specified values.</span>
<span class="source-line-no">414</span><span id="line-414">   * @param row       row key</span>
<span class="source-line-no">415</span><span id="line-415">   * @param family    family name</span>
<span class="source-line-no">416</span><span id="line-416">   * @param qualifier column qualifier</span>
<span class="source-line-no">417</span><span id="line-417">   * @param timestamp version timestamp</span>
<span class="source-line-no">418</span><span id="line-418">   * @param value     column value</span>
<span class="source-line-no">419</span><span id="line-419">   * @param tags      tags non-empty list of tags or null</span>
<span class="source-line-no">420</span><span id="line-420">   * @throws IllegalArgumentException an illegal value was passed</span>
<span class="source-line-no">421</span><span id="line-421">   */</span>
<span class="source-line-no">422</span><span id="line-422">  public KeyValue(final byte[] row, final byte[] family, final byte[] qualifier,</span>
<span class="source-line-no">423</span><span id="line-423">    final long timestamp, final byte[] value, final List&lt;Tag&gt; tags) {</span>
<span class="source-line-no">424</span><span id="line-424">    this(row, 0, row == null ? 0 : row.length, family, 0, family == null ? 0 : family.length,</span>
<span class="source-line-no">425</span><span id="line-425">      qualifier, 0, qualifier == null ? 0 : qualifier.length, timestamp, Type.Put, value, 0,</span>
<span class="source-line-no">426</span><span id="line-426">      value == null ? 0 : value.length, tags);</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">  /**</span>
<span class="source-line-no">430</span><span id="line-430">   * Constructs KeyValue structure filled with specified values.</span>
<span class="source-line-no">431</span><span id="line-431">   * @param row       row key</span>
<span class="source-line-no">432</span><span id="line-432">   * @param family    family name</span>
<span class="source-line-no">433</span><span id="line-433">   * @param qualifier column qualifier</span>
<span class="source-line-no">434</span><span id="line-434">   * @param timestamp version timestamp</span>
<span class="source-line-no">435</span><span id="line-435">   * @param type      key type</span>
<span class="source-line-no">436</span><span id="line-436">   * @param value     column value</span>
<span class="source-line-no">437</span><span id="line-437">   * @throws IllegalArgumentException an illegal value was passed</span>
<span class="source-line-no">438</span><span id="line-438">   */</span>
<span class="source-line-no">439</span><span id="line-439">  public KeyValue(final byte[] row, final byte[] family, final byte[] qualifier,</span>
<span class="source-line-no">440</span><span id="line-440">    final long timestamp, Type type, final byte[] value) {</span>
<span class="source-line-no">441</span><span id="line-441">    this(row, 0, len(row), family, 0, len(family), qualifier, 0, len(qualifier), timestamp, type,</span>
<span class="source-line-no">442</span><span id="line-442">      value, 0, len(value));</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">  /**</span>
<span class="source-line-no">446</span><span id="line-446">   * Constructs KeyValue structure filled with specified values.</span>
<span class="source-line-no">447</span><span id="line-447">   * &lt;p&gt;</span>
<span class="source-line-no">448</span><span id="line-448">   * Column is split into two fields, family and qualifier.</span>
<span class="source-line-no">449</span><span id="line-449">   * @param row       row key</span>
<span class="source-line-no">450</span><span id="line-450">   * @param family    family name</span>
<span class="source-line-no">451</span><span id="line-451">   * @param qualifier column qualifier</span>
<span class="source-line-no">452</span><span id="line-452">   * @param timestamp version timestamp</span>
<span class="source-line-no">453</span><span id="line-453">   * @param type      key type</span>
<span class="source-line-no">454</span><span id="line-454">   * @param value     column value</span>
<span class="source-line-no">455</span><span id="line-455">   * @throws IllegalArgumentException an illegal value was passed</span>
<span class="source-line-no">456</span><span id="line-456">   */</span>
<span class="source-line-no">457</span><span id="line-457">  public KeyValue(final byte[] row, final byte[] family, final byte[] qualifier,</span>
<span class="source-line-no">458</span><span id="line-458">    final long timestamp, Type type, final byte[] value, final List&lt;Tag&gt; tags) {</span>
<span class="source-line-no">459</span><span id="line-459">    this(row, family, qualifier, 0, qualifier == null ? 0 : qualifier.length, timestamp, type,</span>
<span class="source-line-no">460</span><span id="line-460">      value, 0, value == null ? 0 : value.length, tags);</span>
<span class="source-line-no">461</span><span id="line-461">  }</span>
<span class="source-line-no">462</span><span id="line-462"></span>
<span class="source-line-no">463</span><span id="line-463">  /**</span>
<span class="source-line-no">464</span><span id="line-464">   * Constructs KeyValue structure filled with specified values.</span>
<span class="source-line-no">465</span><span id="line-465">   * @param row       row key</span>
<span class="source-line-no">466</span><span id="line-466">   * @param family    family name</span>
<span class="source-line-no">467</span><span id="line-467">   * @param qualifier column qualifier</span>
<span class="source-line-no">468</span><span id="line-468">   * @param timestamp version timestamp</span>
<span class="source-line-no">469</span><span id="line-469">   * @param type      key type</span>
<span class="source-line-no">470</span><span id="line-470">   * @param value     column value</span>
<span class="source-line-no">471</span><span id="line-471">   * @throws IllegalArgumentException an illegal value was passed</span>
<span class="source-line-no">472</span><span id="line-472">   */</span>
<span class="source-line-no">473</span><span id="line-473">  public KeyValue(final byte[] row, final byte[] family, final byte[] qualifier,</span>
<span class="source-line-no">474</span><span id="line-474">    final long timestamp, Type type, final byte[] value, final byte[] tags) {</span>
<span class="source-line-no">475</span><span id="line-475">    this(row, family, qualifier, 0, qualifier == null ? 0 : qualifier.length, timestamp, type,</span>
<span class="source-line-no">476</span><span id="line-476">      value, 0, value == null ? 0 : value.length, tags);</span>
<span class="source-line-no">477</span><span id="line-477">  }</span>
<span class="source-line-no">478</span><span id="line-478"></span>
<span class="source-line-no">479</span><span id="line-479">  /**</span>
<span class="source-line-no">480</span><span id="line-480">   * Constructs KeyValue structure filled with specified values.</span>
<span class="source-line-no">481</span><span id="line-481">   * @param row       row key</span>
<span class="source-line-no">482</span><span id="line-482">   * @param family    family name</span>
<span class="source-line-no">483</span><span id="line-483">   * @param qualifier column qualifier</span>
<span class="source-line-no">484</span><span id="line-484">   * @param qoffset   qualifier offset</span>
<span class="source-line-no">485</span><span id="line-485">   * @param qlength   qualifier length</span>
<span class="source-line-no">486</span><span id="line-486">   * @param timestamp version timestamp</span>
<span class="source-line-no">487</span><span id="line-487">   * @param type      key type</span>
<span class="source-line-no">488</span><span id="line-488">   * @param value     column value</span>
<span class="source-line-no">489</span><span id="line-489">   * @param voffset   value offset</span>
<span class="source-line-no">490</span><span id="line-490">   * @param vlength   value length</span>
<span class="source-line-no">491</span><span id="line-491">   * @throws IllegalArgumentException an illegal value was passed</span>
<span class="source-line-no">492</span><span id="line-492">   */</span>
<span class="source-line-no">493</span><span id="line-493">  public KeyValue(byte[] row, byte[] family, byte[] qualifier, int qoffset, int qlength,</span>
<span class="source-line-no">494</span><span id="line-494">    long timestamp, Type type, byte[] value, int voffset, int vlength, List&lt;Tag&gt; tags) {</span>
<span class="source-line-no">495</span><span id="line-495">    this(row, 0, row == null ? 0 : row.length, family, 0, family == null ? 0 : family.length,</span>
<span class="source-line-no">496</span><span id="line-496">      qualifier, qoffset, qlength, timestamp, type, value, voffset, vlength, tags);</span>
<span class="source-line-no">497</span><span id="line-497">  }</span>
<span class="source-line-no">498</span><span id="line-498"></span>
<span class="source-line-no">499</span><span id="line-499">  /**</span>
<span class="source-line-no">500</span><span id="line-500">   * @param row       row key</span>
<span class="source-line-no">501</span><span id="line-501">   * @param family    family name</span>
<span class="source-line-no">502</span><span id="line-502">   * @param qualifier qualifier name</span>
<span class="source-line-no">503</span><span id="line-503">   * @param qoffset   qualifier offset</span>
<span class="source-line-no">504</span><span id="line-504">   * @param qlength   qualifier length</span>
<span class="source-line-no">505</span><span id="line-505">   * @param timestamp version timestamp</span>
<span class="source-line-no">506</span><span id="line-506">   * @param type      key type</span>
<span class="source-line-no">507</span><span id="line-507">   * @param value     column value</span>
<span class="source-line-no">508</span><span id="line-508">   * @param voffset   value offset</span>
<span class="source-line-no">509</span><span id="line-509">   * @param vlength   value length</span>
<span class="source-line-no">510</span><span id="line-510">   * @param tags      tags</span>
<span class="source-line-no">511</span><span id="line-511">   */</span>
<span class="source-line-no">512</span><span id="line-512">  public KeyValue(byte[] row, byte[] family, byte[] qualifier, int qoffset, int qlength,</span>
<span class="source-line-no">513</span><span id="line-513">    long timestamp, Type type, byte[] value, int voffset, int vlength, byte[] tags) {</span>
<span class="source-line-no">514</span><span id="line-514">    this(row, 0, row == null ? 0 : row.length, family, 0, family == null ? 0 : family.length,</span>
<span class="source-line-no">515</span><span id="line-515">      qualifier, qoffset, qlength, timestamp, type, value, voffset, vlength, tags, 0,</span>
<span class="source-line-no">516</span><span id="line-516">      tags == null ? 0 : tags.length);</span>
<span class="source-line-no">517</span><span id="line-517">  }</span>
<span class="source-line-no">518</span><span id="line-518"></span>
<span class="source-line-no">519</span><span id="line-519">  /**</span>
<span class="source-line-no">520</span><span id="line-520">   * Constructs KeyValue structure filled with specified values.</span>
<span class="source-line-no">521</span><span id="line-521">   * &lt;p&gt;</span>
<span class="source-line-no">522</span><span id="line-522">   * Column is split into two fields, family and qualifier.</span>
<span class="source-line-no">523</span><span id="line-523">   * @param row row key</span>
<span class="source-line-no">524</span><span id="line-524">   * @throws IllegalArgumentException an illegal value was passed</span>
<span class="source-line-no">525</span><span id="line-525">   */</span>
<span class="source-line-no">526</span><span id="line-526">  public KeyValue(final byte[] row, final int roffset, final int rlength, final byte[] family,</span>
<span class="source-line-no">527</span><span id="line-527">    final int foffset, final int flength, final byte[] qualifier, final int qoffset,</span>
<span class="source-line-no">528</span><span id="line-528">    final int qlength, final long timestamp, final Type type, final byte[] value, final int voffset,</span>
<span class="source-line-no">529</span><span id="line-529">    final int vlength) {</span>
<span class="source-line-no">530</span><span id="line-530">    this(row, roffset, rlength, family, foffset, flength, qualifier, qoffset, qlength, timestamp,</span>
<span class="source-line-no">531</span><span id="line-531">      type, value, voffset, vlength, null);</span>
<span class="source-line-no">532</span><span id="line-532">  }</span>
<span class="source-line-no">533</span><span id="line-533"></span>
<span class="source-line-no">534</span><span id="line-534">  /**</span>
<span class="source-line-no">535</span><span id="line-535">   * Constructs KeyValue structure filled with specified values. Uses the provided buffer as the</span>
<span class="source-line-no">536</span><span id="line-536">   * data buffer.</span>
<span class="source-line-no">537</span><span id="line-537">   * &lt;p&gt;</span>
<span class="source-line-no">538</span><span id="line-538">   * Column is split into two fields, family and qualifier.</span>
<span class="source-line-no">539</span><span id="line-539">   * @param buffer    the bytes buffer to use</span>
<span class="source-line-no">540</span><span id="line-540">   * @param boffset   buffer offset</span>
<span class="source-line-no">541</span><span id="line-541">   * @param row       row key</span>
<span class="source-line-no">542</span><span id="line-542">   * @param roffset   row offset</span>
<span class="source-line-no">543</span><span id="line-543">   * @param rlength   row length</span>
<span class="source-line-no">544</span><span id="line-544">   * @param family    family name</span>
<span class="source-line-no">545</span><span id="line-545">   * @param foffset   family offset</span>
<span class="source-line-no">546</span><span id="line-546">   * @param flength   family length</span>
<span class="source-line-no">547</span><span id="line-547">   * @param qualifier column qualifier</span>
<span class="source-line-no">548</span><span id="line-548">   * @param qoffset   qualifier offset</span>
<span class="source-line-no">549</span><span id="line-549">   * @param qlength   qualifier length</span>
<span class="source-line-no">550</span><span id="line-550">   * @param timestamp version timestamp</span>
<span class="source-line-no">551</span><span id="line-551">   * @param type      key type</span>
<span class="source-line-no">552</span><span id="line-552">   * @param value     column value</span>
<span class="source-line-no">553</span><span id="line-553">   * @param voffset   value offset</span>
<span class="source-line-no">554</span><span id="line-554">   * @param vlength   value length</span>
<span class="source-line-no">555</span><span id="line-555">   * @param tags      non-empty list of tags or null</span>
<span class="source-line-no">556</span><span id="line-556">   * @throws IllegalArgumentException an illegal value was passed or there is insufficient space</span>
<span class="source-line-no">557</span><span id="line-557">   *                                  remaining in the buffer</span>
<span class="source-line-no">558</span><span id="line-558">   */</span>
<span class="source-line-no">559</span><span id="line-559">  public KeyValue(byte[] buffer, final int boffset, final byte[] row, final int roffset,</span>
<span class="source-line-no">560</span><span id="line-560">    final int rlength, final byte[] family, final int foffset, final int flength,</span>
<span class="source-line-no">561</span><span id="line-561">    final byte[] qualifier, final int qoffset, final int qlength, final long timestamp,</span>
<span class="source-line-no">562</span><span id="line-562">    final Type type, final byte[] value, final int voffset, final int vlength, final Tag[] tags) {</span>
<span class="source-line-no">563</span><span id="line-563">    this.bytes = buffer;</span>
<span class="source-line-no">564</span><span id="line-564">    this.length = writeByteArray(buffer, boffset, row, roffset, rlength, family, foffset, flength,</span>
<span class="source-line-no">565</span><span id="line-565">      qualifier, qoffset, qlength, timestamp, type, value, voffset, vlength, tags);</span>
<span class="source-line-no">566</span><span id="line-566">    this.offset = boffset;</span>
<span class="source-line-no">567</span><span id="line-567">  }</span>
<span class="source-line-no">568</span><span id="line-568"></span>
<span class="source-line-no">569</span><span id="line-569">  /**</span>
<span class="source-line-no">570</span><span id="line-570">   * Constructs KeyValue structure filled with specified values.</span>
<span class="source-line-no">571</span><span id="line-571">   * &lt;p&gt;</span>
<span class="source-line-no">572</span><span id="line-572">   * Column is split into two fields, family and qualifier.</span>
<span class="source-line-no">573</span><span id="line-573">   * @param row       row key</span>
<span class="source-line-no">574</span><span id="line-574">   * @param roffset   row offset</span>
<span class="source-line-no">575</span><span id="line-575">   * @param rlength   row length</span>
<span class="source-line-no">576</span><span id="line-576">   * @param family    family name</span>
<span class="source-line-no">577</span><span id="line-577">   * @param foffset   family offset</span>
<span class="source-line-no">578</span><span id="line-578">   * @param flength   family length</span>
<span class="source-line-no">579</span><span id="line-579">   * @param qualifier column qualifier</span>
<span class="source-line-no">580</span><span id="line-580">   * @param qoffset   qualifier offset</span>
<span class="source-line-no">581</span><span id="line-581">   * @param qlength   qualifier length</span>
<span class="source-line-no">582</span><span id="line-582">   * @param timestamp version timestamp</span>
<span class="source-line-no">583</span><span id="line-583">   * @param type      key type</span>
<span class="source-line-no">584</span><span id="line-584">   * @param value     column value</span>
<span class="source-line-no">585</span><span id="line-585">   * @param voffset   value offset</span>
<span class="source-line-no">586</span><span id="line-586">   * @param vlength   value length</span>
<span class="source-line-no">587</span><span id="line-587">   * @param tags      tags</span>
<span class="source-line-no">588</span><span id="line-588">   * @throws IllegalArgumentException an illegal value was passed</span>
<span class="source-line-no">589</span><span id="line-589">   */</span>
<span class="source-line-no">590</span><span id="line-590">  public KeyValue(final byte[] row, final int roffset, final int rlength, final byte[] family,</span>
<span class="source-line-no">591</span><span id="line-591">    final int foffset, final int flength, final byte[] qualifier, final int qoffset,</span>
<span class="source-line-no">592</span><span id="line-592">    final int qlength, final long timestamp, final Type type, final byte[] value, final int voffset,</span>
<span class="source-line-no">593</span><span id="line-593">    final int vlength, final List&lt;Tag&gt; tags) {</span>
<span class="source-line-no">594</span><span id="line-594">    this.bytes = createByteArray(row, roffset, rlength, family, foffset, flength, qualifier,</span>
<span class="source-line-no">595</span><span id="line-595">      qoffset, qlength, timestamp, type, value, voffset, vlength, tags);</span>
<span class="source-line-no">596</span><span id="line-596">    this.length = bytes.length;</span>
<span class="source-line-no">597</span><span id="line-597">    this.offset = 0;</span>
<span class="source-line-no">598</span><span id="line-598">  }</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">   * @param row       row key</span>
<span class="source-line-no">602</span><span id="line-602">   * @param roffset   row offset</span>
<span class="source-line-no">603</span><span id="line-603">   * @param rlength   row length</span>
<span class="source-line-no">604</span><span id="line-604">   * @param family    family name</span>
<span class="source-line-no">605</span><span id="line-605">   * @param foffset   fammily offset</span>
<span class="source-line-no">606</span><span id="line-606">   * @param flength   family length</span>
<span class="source-line-no">607</span><span id="line-607">   * @param qualifier column qualifier</span>
<span class="source-line-no">608</span><span id="line-608">   * @param qoffset   qualifier offset</span>
<span class="source-line-no">609</span><span id="line-609">   * @param qlength   qualifier length</span>
<span class="source-line-no">610</span><span id="line-610">   * @param timestamp version timestamp</span>
<span class="source-line-no">611</span><span id="line-611">   * @param type      key type</span>
<span class="source-line-no">612</span><span id="line-612">   * @param value     column value</span>
<span class="source-line-no">613</span><span id="line-613">   * @param voffset   value offset</span>
<span class="source-line-no">614</span><span id="line-614">   * @param vlength   value length</span>
<span class="source-line-no">615</span><span id="line-615">   * @param tags      input tags</span>
<span class="source-line-no">616</span><span id="line-616">   */</span>
<span class="source-line-no">617</span><span id="line-617">  public KeyValue(final byte[] row, final int roffset, final int rlength, final byte[] family,</span>
<span class="source-line-no">618</span><span id="line-618">    final int foffset, final int flength, final byte[] qualifier, final int qoffset,</span>
<span class="source-line-no">619</span><span id="line-619">    final int qlength, final long timestamp, final Type type, final byte[] value, final int voffset,</span>
<span class="source-line-no">620</span><span id="line-620">    final int vlength, final byte[] tags, final int tagsOffset, final int tagsLength) {</span>
<span class="source-line-no">621</span><span id="line-621">    this.bytes = createByteArray(row, roffset, rlength, family, foffset, flength, qualifier,</span>
<span class="source-line-no">622</span><span id="line-622">      qoffset, qlength, timestamp, type, value, voffset, vlength, tags, tagsOffset, tagsLength);</span>
<span class="source-line-no">623</span><span id="line-623">    this.length = bytes.length;</span>
<span class="source-line-no">624</span><span id="line-624">    this.offset = 0;</span>
<span class="source-line-no">625</span><span id="line-625">  }</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">   * Constructs an empty KeyValue structure, with specified sizes. This can be used to partially</span>
<span class="source-line-no">629</span><span id="line-629">   * fill up KeyValues.</span>
<span class="source-line-no">630</span><span id="line-630">   * &lt;p&gt;</span>
<span class="source-line-no">631</span><span id="line-631">   * Column is split into two fields, family and qualifier.</span>
<span class="source-line-no">632</span><span id="line-632">   * @param rlength   row length</span>
<span class="source-line-no">633</span><span id="line-633">   * @param flength   family length</span>
<span class="source-line-no">634</span><span id="line-634">   * @param qlength   qualifier length</span>
<span class="source-line-no">635</span><span id="line-635">   * @param timestamp version timestamp</span>
<span class="source-line-no">636</span><span id="line-636">   * @param type      key type</span>
<span class="source-line-no">637</span><span id="line-637">   * @param vlength   value length</span>
<span class="source-line-no">638</span><span id="line-638">   * @throws IllegalArgumentException an illegal value was passed</span>
<span class="source-line-no">639</span><span id="line-639">   */</span>
<span class="source-line-no">640</span><span id="line-640">  public KeyValue(final int rlength, final int flength, final int qlength, final long timestamp,</span>
<span class="source-line-no">641</span><span id="line-641">    final Type type, final int vlength) {</span>
<span class="source-line-no">642</span><span id="line-642">    this(rlength, flength, qlength, timestamp, type, vlength, 0);</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">  /**</span>
<span class="source-line-no">646</span><span id="line-646">   * Constructs an empty KeyValue structure, with specified sizes. This can be used to partially</span>
<span class="source-line-no">647</span><span id="line-647">   * fill up KeyValues.</span>
<span class="source-line-no">648</span><span id="line-648">   * &lt;p&gt;</span>
<span class="source-line-no">649</span><span id="line-649">   * Column is split into two fields, family and qualifier.</span>
<span class="source-line-no">650</span><span id="line-650">   * @param rlength    row length</span>
<span class="source-line-no">651</span><span id="line-651">   * @param flength    family length</span>
<span class="source-line-no">652</span><span id="line-652">   * @param qlength    qualifier length</span>
<span class="source-line-no">653</span><span id="line-653">   * @param timestamp  version timestamp</span>
<span class="source-line-no">654</span><span id="line-654">   * @param type       key type</span>
<span class="source-line-no">655</span><span id="line-655">   * @param vlength    value length</span>
<span class="source-line-no">656</span><span id="line-656">   * @param tagsLength length of the tags</span>
<span class="source-line-no">657</span><span id="line-657">   * @throws IllegalArgumentException an illegal value was passed</span>
<span class="source-line-no">658</span><span id="line-658">   */</span>
<span class="source-line-no">659</span><span id="line-659">  public KeyValue(final int rlength, final int flength, final int qlength, final long timestamp,</span>
<span class="source-line-no">660</span><span id="line-660">    final Type type, final int vlength, final int tagsLength) {</span>
<span class="source-line-no">661</span><span id="line-661">    this.bytes =</span>
<span class="source-line-no">662</span><span id="line-662">      createEmptyByteArray(rlength, flength, qlength, timestamp, type, vlength, tagsLength);</span>
<span class="source-line-no">663</span><span id="line-663">    this.length = bytes.length;</span>
<span class="source-line-no">664</span><span id="line-664">    this.offset = 0;</span>
<span class="source-line-no">665</span><span id="line-665">  }</span>
<span class="source-line-no">666</span><span id="line-666"></span>
<span class="source-line-no">667</span><span id="line-667">  public KeyValue(byte[] row, int roffset, int rlength, byte[] family, int foffset, int flength,</span>
<span class="source-line-no">668</span><span id="line-668">    ByteBuffer qualifier, long ts, Type type, ByteBuffer value, List&lt;Tag&gt; tags) {</span>
<span class="source-line-no">669</span><span id="line-669">    this.bytes = createByteArray(row, roffset, rlength, family, foffset, flength, qualifier, 0,</span>
<span class="source-line-no">670</span><span id="line-670">      qualifier == null ? 0 : qualifier.remaining(), ts, type, value, 0,</span>
<span class="source-line-no">671</span><span id="line-671">      value == null ? 0 : value.remaining(), tags);</span>
<span class="source-line-no">672</span><span id="line-672">    this.length = bytes.length;</span>
<span class="source-line-no">673</span><span id="line-673">    this.offset = 0;</span>
<span class="source-line-no">674</span><span id="line-674">  }</span>
<span class="source-line-no">675</span><span id="line-675"></span>
<span class="source-line-no">676</span><span id="line-676">  public KeyValue(ExtendedCell c) {</span>
<span class="source-line-no">677</span><span id="line-677">    this(c.getRowArray(), c.getRowOffset(), c.getRowLength(), c.getFamilyArray(),</span>
<span class="source-line-no">678</span><span id="line-678">      c.getFamilyOffset(), c.getFamilyLength(), c.getQualifierArray(), c.getQualifierOffset(),</span>
<span class="source-line-no">679</span><span id="line-679">      c.getQualifierLength(), c.getTimestamp(), Type.codeToType(c.getTypeByte()), c.getValueArray(),</span>
<span class="source-line-no">680</span><span id="line-680">      c.getValueOffset(), c.getValueLength(), c.getTagsArray(), c.getTagsOffset(),</span>
<span class="source-line-no">681</span><span id="line-681">      c.getTagsLength());</span>
<span class="source-line-no">682</span><span id="line-682">    this.seqId = c.getSequenceId();</span>
<span class="source-line-no">683</span><span id="line-683">  }</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">   * Create an empty byte[] representing a KeyValue All lengths are preset and can be filled in</span>
<span class="source-line-no">687</span><span id="line-687">   * later.</span>
<span class="source-line-no">688</span><span id="line-688">   * @param rlength   row length</span>
<span class="source-line-no">689</span><span id="line-689">   * @param flength   family length</span>
<span class="source-line-no">690</span><span id="line-690">   * @param qlength   qualifier length</span>
<span class="source-line-no">691</span><span id="line-691">   * @param timestamp version timestamp</span>
<span class="source-line-no">692</span><span id="line-692">   * @param type      key type</span>
<span class="source-line-no">693</span><span id="line-693">   * @param vlength   value length</span>
<span class="source-line-no">694</span><span id="line-694">   * @return The newly created byte array.</span>
<span class="source-line-no">695</span><span id="line-695">   */</span>
<span class="source-line-no">696</span><span id="line-696">  private static byte[] createEmptyByteArray(final int rlength, int flength, int qlength,</span>
<span class="source-line-no">697</span><span id="line-697">    final long timestamp, final Type type, int vlength, int tagsLength) {</span>
<span class="source-line-no">698</span><span id="line-698">    if (rlength &gt; Short.MAX_VALUE) {</span>
<span class="source-line-no">699</span><span id="line-699">      throw new IllegalArgumentException("Row &gt; " + Short.MAX_VALUE);</span>
<span class="source-line-no">700</span><span id="line-700">    }</span>
<span class="source-line-no">701</span><span id="line-701">    if (flength &gt; Byte.MAX_VALUE) {</span>
<span class="source-line-no">702</span><span id="line-702">      throw new IllegalArgumentException("Family &gt; " + Byte.MAX_VALUE);</span>
<span class="source-line-no">703</span><span id="line-703">    }</span>
<span class="source-line-no">704</span><span id="line-704">    // Qualifier length</span>
<span class="source-line-no">705</span><span id="line-705">    if (qlength &gt; Integer.MAX_VALUE - rlength - flength) {</span>
<span class="source-line-no">706</span><span id="line-706">      throw new IllegalArgumentException("Qualifier &gt; " + Integer.MAX_VALUE);</span>
<span class="source-line-no">707</span><span id="line-707">    }</span>
<span class="source-line-no">708</span><span id="line-708">    RawCell.checkForTagsLength(tagsLength);</span>
<span class="source-line-no">709</span><span id="line-709">    // Key length</span>
<span class="source-line-no">710</span><span id="line-710">    long longkeylength = getKeyDataStructureSize(rlength, flength, qlength);</span>
<span class="source-line-no">711</span><span id="line-711">    if (longkeylength &gt; Integer.MAX_VALUE) {</span>
<span class="source-line-no">712</span><span id="line-712">      throw new IllegalArgumentException("keylength " + longkeylength + " &gt; " + Integer.MAX_VALUE);</span>
<span class="source-line-no">713</span><span id="line-713">    }</span>
<span class="source-line-no">714</span><span id="line-714">    int keylength = (int) longkeylength;</span>
<span class="source-line-no">715</span><span id="line-715">    // Value length</span>
<span class="source-line-no">716</span><span id="line-716">    if (vlength &gt; HConstants.MAXIMUM_VALUE_LENGTH) { // FindBugs INT_VACUOUS_COMPARISON</span>
<span class="source-line-no">717</span><span id="line-717">      throw new IllegalArgumentException("Valuer &gt; " + HConstants.MAXIMUM_VALUE_LENGTH);</span>
<span class="source-line-no">718</span><span id="line-718">    }</span>
<span class="source-line-no">719</span><span id="line-719"></span>
<span class="source-line-no">720</span><span id="line-720">    // Allocate right-sized byte array.</span>
<span class="source-line-no">721</span><span id="line-721">    byte[] bytes =</span>
<span class="source-line-no">722</span><span id="line-722">      new byte[(int) getKeyValueDataStructureSize(rlength, flength, qlength, vlength, tagsLength)];</span>
<span class="source-line-no">723</span><span id="line-723">    // Write the correct size markers</span>
<span class="source-line-no">724</span><span id="line-724">    int pos = 0;</span>
<span class="source-line-no">725</span><span id="line-725">    pos = Bytes.putInt(bytes, pos, keylength);</span>
<span class="source-line-no">726</span><span id="line-726">    pos = Bytes.putInt(bytes, pos, vlength);</span>
<span class="source-line-no">727</span><span id="line-727">    pos = Bytes.putShort(bytes, pos, (short) (rlength &amp; 0x0000ffff));</span>
<span class="source-line-no">728</span><span id="line-728">    pos += rlength;</span>
<span class="source-line-no">729</span><span id="line-729">    pos = Bytes.putByte(bytes, pos, (byte) (flength &amp; 0x0000ff));</span>
<span class="source-line-no">730</span><span id="line-730">    pos += flength + qlength;</span>
<span class="source-line-no">731</span><span id="line-731">    pos = Bytes.putLong(bytes, pos, timestamp);</span>
<span class="source-line-no">732</span><span id="line-732">    pos = Bytes.putByte(bytes, pos, type.getCode());</span>
<span class="source-line-no">733</span><span id="line-733">    pos += vlength;</span>
<span class="source-line-no">734</span><span id="line-734">    if (tagsLength &gt; 0) {</span>
<span class="source-line-no">735</span><span id="line-735">      pos = Bytes.putAsShort(bytes, pos, tagsLength);</span>
<span class="source-line-no">736</span><span id="line-736">    }</span>
<span class="source-line-no">737</span><span id="line-737">    return bytes;</span>
<span class="source-line-no">738</span><span id="line-738">  }</span>
<span class="source-line-no">739</span><span id="line-739"></span>
<span class="source-line-no">740</span><span id="line-740">  /**</span>
<span class="source-line-no">741</span><span id="line-741">   * Checks the parameters passed to a constructor.</span>
<span class="source-line-no">742</span><span id="line-742">   * @param row     row key</span>
<span class="source-line-no">743</span><span id="line-743">   * @param rlength row length</span>
<span class="source-line-no">744</span><span id="line-744">   * @param family  family name</span>
<span class="source-line-no">745</span><span id="line-745">   * @param flength family length</span>
<span class="source-line-no">746</span><span id="line-746">   * @param qlength qualifier length</span>
<span class="source-line-no">747</span><span id="line-747">   * @param vlength value length</span>
<span class="source-line-no">748</span><span id="line-748">   * @throws IllegalArgumentException an illegal value was passed</span>
<span class="source-line-no">749</span><span id="line-749">   */</span>
<span class="source-line-no">750</span><span id="line-750">  static void checkParameters(final byte[] row, final int rlength, final byte[] family, int flength,</span>
<span class="source-line-no">751</span><span id="line-751">    int qlength, int vlength) throws IllegalArgumentException {</span>
<span class="source-line-no">752</span><span id="line-752">    if (rlength &gt; Short.MAX_VALUE) {</span>
<span class="source-line-no">753</span><span id="line-753">      throw new IllegalArgumentException("Row &gt; " + Short.MAX_VALUE);</span>
<span class="source-line-no">754</span><span id="line-754">    }</span>
<span class="source-line-no">755</span><span id="line-755">    if (row == null) {</span>
<span class="source-line-no">756</span><span id="line-756">      throw new IllegalArgumentException("Row is null");</span>
<span class="source-line-no">757</span><span id="line-757">    }</span>
<span class="source-line-no">758</span><span id="line-758">    // Family length</span>
<span class="source-line-no">759</span><span id="line-759">    flength = family == null ? 0 : flength;</span>
<span class="source-line-no">760</span><span id="line-760">    if (flength &gt; Byte.MAX_VALUE) {</span>
<span class="source-line-no">761</span><span id="line-761">      throw new IllegalArgumentException("Family &gt; " + Byte.MAX_VALUE);</span>
<span class="source-line-no">762</span><span id="line-762">    }</span>
<span class="source-line-no">763</span><span id="line-763">    // Qualifier length</span>
<span class="source-line-no">764</span><span id="line-764">    if (qlength &gt; Integer.MAX_VALUE - rlength - flength) {</span>
<span class="source-line-no">765</span><span id="line-765">      throw new IllegalArgumentException("Qualifier &gt; " + Integer.MAX_VALUE);</span>
<span class="source-line-no">766</span><span id="line-766">    }</span>
<span class="source-line-no">767</span><span id="line-767">    // Key length</span>
<span class="source-line-no">768</span><span id="line-768">    long longKeyLength = getKeyDataStructureSize(rlength, flength, qlength);</span>
<span class="source-line-no">769</span><span id="line-769">    if (longKeyLength &gt; Integer.MAX_VALUE) {</span>
<span class="source-line-no">770</span><span id="line-770">      throw new IllegalArgumentException("keylength " + longKeyLength + " &gt; " + Integer.MAX_VALUE);</span>
<span class="source-line-no">771</span><span id="line-771">    }</span>
<span class="source-line-no">772</span><span id="line-772">    // Value length</span>
<span class="source-line-no">773</span><span id="line-773">    if (vlength &gt; HConstants.MAXIMUM_VALUE_LENGTH) { // FindBugs INT_VACUOUS_COMPARISON</span>
<span class="source-line-no">774</span><span id="line-774">      throw new IllegalArgumentException(</span>
<span class="source-line-no">775</span><span id="line-775">        "Value length " + vlength + " &gt; " + HConstants.MAXIMUM_VALUE_LENGTH);</span>
<span class="source-line-no">776</span><span id="line-776">    }</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">  /**</span>
<span class="source-line-no">780</span><span id="line-780">   * Write KeyValue format into the provided byte array.</span>
<span class="source-line-no">781</span><span id="line-781">   * @param buffer    the bytes buffer to use</span>
<span class="source-line-no">782</span><span id="line-782">   * @param boffset   buffer offset</span>
<span class="source-line-no">783</span><span id="line-783">   * @param row       row key</span>
<span class="source-line-no">784</span><span id="line-784">   * @param roffset   row offset</span>
<span class="source-line-no">785</span><span id="line-785">   * @param rlength   row length</span>
<span class="source-line-no">786</span><span id="line-786">   * @param family    family name</span>
<span class="source-line-no">787</span><span id="line-787">   * @param foffset   family offset</span>
<span class="source-line-no">788</span><span id="line-788">   * @param flength   family length</span>
<span class="source-line-no">789</span><span id="line-789">   * @param qualifier column qualifier</span>
<span class="source-line-no">790</span><span id="line-790">   * @param qoffset   qualifier offset</span>
<span class="source-line-no">791</span><span id="line-791">   * @param qlength   qualifier length</span>
<span class="source-line-no">792</span><span id="line-792">   * @param timestamp version timestamp</span>
<span class="source-line-no">793</span><span id="line-793">   * @param type      key type</span>
<span class="source-line-no">794</span><span id="line-794">   * @param value     column value</span>
<span class="source-line-no">795</span><span id="line-795">   * @param voffset   value offset</span>
<span class="source-line-no">796</span><span id="line-796">   * @param vlength   value length</span>
<span class="source-line-no">797</span><span id="line-797">   * @return The number of useful bytes in the buffer.</span>
<span class="source-line-no">798</span><span id="line-798">   * @throws IllegalArgumentException an illegal value was passed or there is insufficient space</span>
<span class="source-line-no">799</span><span id="line-799">   *                                  remaining in the buffer</span>
<span class="source-line-no">800</span><span id="line-800">   */</span>
<span class="source-line-no">801</span><span id="line-801">  public static int writeByteArray(byte[] buffer, final int boffset, final byte[] row,</span>
<span class="source-line-no">802</span><span id="line-802">    final int roffset, final int rlength, final byte[] family, final int foffset, int flength,</span>
<span class="source-line-no">803</span><span id="line-803">    final byte[] qualifier, final int qoffset, int qlength, final long timestamp, final Type type,</span>
<span class="source-line-no">804</span><span id="line-804">    final byte[] value, final int voffset, int vlength, Tag[] tags) {</span>
<span class="source-line-no">805</span><span id="line-805"></span>
<span class="source-line-no">806</span><span id="line-806">    checkParameters(row, rlength, family, flength, qlength, vlength);</span>
<span class="source-line-no">807</span><span id="line-807"></span>
<span class="source-line-no">808</span><span id="line-808">    // Calculate length of tags area</span>
<span class="source-line-no">809</span><span id="line-809">    int tagsLength = 0;</span>
<span class="source-line-no">810</span><span id="line-810">    if (tags != null &amp;&amp; tags.length &gt; 0) {</span>
<span class="source-line-no">811</span><span id="line-811">      for (Tag t : tags) {</span>
<span class="source-line-no">812</span><span id="line-812">        tagsLength += t.getValueLength() + Tag.INFRASTRUCTURE_SIZE;</span>
<span class="source-line-no">813</span><span id="line-813">      }</span>
<span class="source-line-no">814</span><span id="line-814">    }</span>
<span class="source-line-no">815</span><span id="line-815">    RawCell.checkForTagsLength(tagsLength);</span>
<span class="source-line-no">816</span><span id="line-816">    int keyLength = (int) getKeyDataStructureSize(rlength, flength, qlength);</span>
<span class="source-line-no">817</span><span id="line-817">    int keyValueLength =</span>
<span class="source-line-no">818</span><span id="line-818">      (int) getKeyValueDataStructureSize(rlength, flength, qlength, vlength, tagsLength);</span>
<span class="source-line-no">819</span><span id="line-819">    if (keyValueLength &gt; buffer.length - boffset) {</span>
<span class="source-line-no">820</span><span id="line-820">      throw new IllegalArgumentException(</span>
<span class="source-line-no">821</span><span id="line-821">        "Buffer size " + (buffer.length - boffset) + " &lt; " + keyValueLength);</span>
<span class="source-line-no">822</span><span id="line-822">    }</span>
<span class="source-line-no">823</span><span id="line-823"></span>
<span class="source-line-no">824</span><span id="line-824">    // Write key, value and key row length.</span>
<span class="source-line-no">825</span><span id="line-825">    int pos = boffset;</span>
<span class="source-line-no">826</span><span id="line-826">    pos = Bytes.putInt(buffer, pos, keyLength);</span>
<span class="source-line-no">827</span><span id="line-827">    pos = Bytes.putInt(buffer, pos, vlength);</span>
<span class="source-line-no">828</span><span id="line-828">    pos = Bytes.putShort(buffer, pos, (short) (rlength &amp; 0x0000ffff));</span>
<span class="source-line-no">829</span><span id="line-829">    pos = Bytes.putBytes(buffer, pos, row, roffset, rlength);</span>
<span class="source-line-no">830</span><span id="line-830">    pos = Bytes.putByte(buffer, pos, (byte) (flength &amp; 0x0000ff));</span>
<span class="source-line-no">831</span><span id="line-831">    if (flength != 0) {</span>
<span class="source-line-no">832</span><span id="line-832">      pos = Bytes.putBytes(buffer, pos, family, foffset, flength);</span>
<span class="source-line-no">833</span><span id="line-833">    }</span>
<span class="source-line-no">834</span><span id="line-834">    if (qlength != 0) {</span>
<span class="source-line-no">835</span><span id="line-835">      pos = Bytes.putBytes(buffer, pos, qualifier, qoffset, qlength);</span>
<span class="source-line-no">836</span><span id="line-836">    }</span>
<span class="source-line-no">837</span><span id="line-837">    pos = Bytes.putLong(buffer, pos, timestamp);</span>
<span class="source-line-no">838</span><span id="line-838">    pos = Bytes.putByte(buffer, pos, type.getCode());</span>
<span class="source-line-no">839</span><span id="line-839">    if (value != null &amp;&amp; value.length &gt; 0) {</span>
<span class="source-line-no">840</span><span id="line-840">      pos = Bytes.putBytes(buffer, pos, value, voffset, vlength);</span>
<span class="source-line-no">841</span><span id="line-841">    }</span>
<span class="source-line-no">842</span><span id="line-842">    // Write the number of tags. If it is 0 then it means there are no tags.</span>
<span class="source-line-no">843</span><span id="line-843">    if (tagsLength &gt; 0) {</span>
<span class="source-line-no">844</span><span id="line-844">      pos = Bytes.putAsShort(buffer, pos, tagsLength);</span>
<span class="source-line-no">845</span><span id="line-845">      for (Tag t : tags) {</span>
<span class="source-line-no">846</span><span id="line-846">        int tlen = t.getValueLength();</span>
<span class="source-line-no">847</span><span id="line-847">        pos = Bytes.putAsShort(buffer, pos, tlen + Tag.TYPE_LENGTH_SIZE);</span>
<span class="source-line-no">848</span><span id="line-848">        pos = Bytes.putByte(buffer, pos, t.getType());</span>
<span class="source-line-no">849</span><span id="line-849">        Tag.copyValueTo(t, buffer, pos);</span>
<span class="source-line-no">850</span><span id="line-850">        pos += tlen;</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">    return keyValueLength;</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">  /**</span>
<span class="source-line-no">857</span><span id="line-857">   * Write KeyValue format into a byte array.</span>
<span class="source-line-no">858</span><span id="line-858">   * @param row       row key</span>
<span class="source-line-no">859</span><span id="line-859">   * @param roffset   row offset</span>
<span class="source-line-no">860</span><span id="line-860">   * @param rlength   row length</span>
<span class="source-line-no">861</span><span id="line-861">   * @param family    family name</span>
<span class="source-line-no">862</span><span id="line-862">   * @param foffset   family offset</span>
<span class="source-line-no">863</span><span id="line-863">   * @param flength   family length</span>
<span class="source-line-no">864</span><span id="line-864">   * @param qualifier column qualifier</span>
<span class="source-line-no">865</span><span id="line-865">   * @param qoffset   qualifier offset</span>
<span class="source-line-no">866</span><span id="line-866">   * @param qlength   qualifier length</span>
<span class="source-line-no">867</span><span id="line-867">   * @param timestamp version timestamp</span>
<span class="source-line-no">868</span><span id="line-868">   * @param type      key type</span>
<span class="source-line-no">869</span><span id="line-869">   * @param value     column value</span>
<span class="source-line-no">870</span><span id="line-870">   * @param voffset   value offset</span>
<span class="source-line-no">871</span><span id="line-871">   * @param vlength   value length</span>
<span class="source-line-no">872</span><span id="line-872">   * @return The newly created byte array.</span>
<span class="source-line-no">873</span><span id="line-873">   */</span>
<span class="source-line-no">874</span><span id="line-874">  private static byte[] createByteArray(final byte[] row, final int roffset, final int rlength,</span>
<span class="source-line-no">875</span><span id="line-875">    final byte[] family, final int foffset, int flength, final byte[] qualifier, final int qoffset,</span>
<span class="source-line-no">876</span><span id="line-876">    int qlength, final long timestamp, final Type type, final byte[] value, final int voffset,</span>
<span class="source-line-no">877</span><span id="line-877">    int vlength, byte[] tags, int tagsOffset, int tagsLength) {</span>
<span class="source-line-no">878</span><span id="line-878"></span>
<span class="source-line-no">879</span><span id="line-879">    checkParameters(row, rlength, family, flength, qlength, vlength);</span>
<span class="source-line-no">880</span><span id="line-880">    RawCell.checkForTagsLength(tagsLength);</span>
<span class="source-line-no">881</span><span id="line-881">    // Allocate right-sized byte array.</span>
<span class="source-line-no">882</span><span id="line-882">    int keyLength = (int) getKeyDataStructureSize(rlength, flength, qlength);</span>
<span class="source-line-no">883</span><span id="line-883">    byte[] bytes =</span>
<span class="source-line-no">884</span><span id="line-884">      new byte[(int) getKeyValueDataStructureSize(rlength, flength, qlength, vlength, tagsLength)];</span>
<span class="source-line-no">885</span><span id="line-885">    // Write key, value and key row length.</span>
<span class="source-line-no">886</span><span id="line-886">    int pos = 0;</span>
<span class="source-line-no">887</span><span id="line-887">    pos = Bytes.putInt(bytes, pos, keyLength);</span>
<span class="source-line-no">888</span><span id="line-888">    pos = Bytes.putInt(bytes, pos, vlength);</span>
<span class="source-line-no">889</span><span id="line-889">    pos = Bytes.putShort(bytes, pos, (short) (rlength &amp; 0x0000ffff));</span>
<span class="source-line-no">890</span><span id="line-890">    pos = Bytes.putBytes(bytes, pos, row, roffset, rlength);</span>
<span class="source-line-no">891</span><span id="line-891">    pos = Bytes.putByte(bytes, pos, (byte) (flength &amp; 0x0000ff));</span>
<span class="source-line-no">892</span><span id="line-892">    if (flength != 0) {</span>
<span class="source-line-no">893</span><span id="line-893">      pos = Bytes.putBytes(bytes, pos, family, foffset, flength);</span>
<span class="source-line-no">894</span><span id="line-894">    }</span>
<span class="source-line-no">895</span><span id="line-895">    if (qlength != 0) {</span>
<span class="source-line-no">896</span><span id="line-896">      pos = Bytes.putBytes(bytes, pos, qualifier, qoffset, qlength);</span>
<span class="source-line-no">897</span><span id="line-897">    }</span>
<span class="source-line-no">898</span><span id="line-898">    pos = Bytes.putLong(bytes, pos, timestamp);</span>
<span class="source-line-no">899</span><span id="line-899">    pos = Bytes.putByte(bytes, pos, type.getCode());</span>
<span class="source-line-no">900</span><span id="line-900">    if (value != null &amp;&amp; value.length &gt; 0) {</span>
<span class="source-line-no">901</span><span id="line-901">      pos = Bytes.putBytes(bytes, pos, value, voffset, vlength);</span>
<span class="source-line-no">902</span><span id="line-902">    }</span>
<span class="source-line-no">903</span><span id="line-903">    // Add the tags after the value part</span>
<span class="source-line-no">904</span><span id="line-904">    if (tagsLength &gt; 0) {</span>
<span class="source-line-no">905</span><span id="line-905">      pos = Bytes.putAsShort(bytes, pos, tagsLength);</span>
<span class="source-line-no">906</span><span id="line-906">      pos = Bytes.putBytes(bytes, pos, tags, tagsOffset, tagsLength);</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 bytes;</span>
<span class="source-line-no">909</span><span id="line-909">  }</span>
<span class="source-line-no">910</span><span id="line-910"></span>
<span class="source-line-no">911</span><span id="line-911">  /**</span>
<span class="source-line-no">912</span><span id="line-912">   * @param qualifier can be a ByteBuffer or a byte[], or null.</span>
<span class="source-line-no">913</span><span id="line-913">   * @param value     can be a ByteBuffer or a byte[], or null.</span>
<span class="source-line-no">914</span><span id="line-914">   */</span>
<span class="source-line-no">915</span><span id="line-915">  private static byte[] createByteArray(final byte[] row, final int roffset, final int rlength,</span>
<span class="source-line-no">916</span><span id="line-916">    final byte[] family, final int foffset, int flength, final Object qualifier, final int qoffset,</span>
<span class="source-line-no">917</span><span id="line-917">    int qlength, final long timestamp, final Type type, final Object value, final int voffset,</span>
<span class="source-line-no">918</span><span id="line-918">    int vlength, List&lt;Tag&gt; 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">    checkParameters(row, rlength, family, flength, qlength, vlength);</span>
<span class="source-line-no">921</span><span id="line-921"></span>
<span class="source-line-no">922</span><span id="line-922">    // Calculate length of tags area</span>
<span class="source-line-no">923</span><span id="line-923">    int tagsLength = 0;</span>
<span class="source-line-no">924</span><span id="line-924">    if (tags != null &amp;&amp; !tags.isEmpty()) {</span>
<span class="source-line-no">925</span><span id="line-925">      for (Tag t : tags) {</span>
<span class="source-line-no">926</span><span id="line-926">        tagsLength += t.getValueLength() + Tag.INFRASTRUCTURE_SIZE;</span>
<span class="source-line-no">927</span><span id="line-927">      }</span>
<span class="source-line-no">928</span><span id="line-928">    }</span>
<span class="source-line-no">929</span><span id="line-929">    RawCell.checkForTagsLength(tagsLength);</span>
<span class="source-line-no">930</span><span id="line-930">    // Allocate right-sized byte array.</span>
<span class="source-line-no">931</span><span id="line-931">    int keyLength = (int) getKeyDataStructureSize(rlength, flength, qlength);</span>
<span class="source-line-no">932</span><span id="line-932">    byte[] bytes =</span>
<span class="source-line-no">933</span><span id="line-933">      new byte[(int) getKeyValueDataStructureSize(rlength, flength, qlength, vlength, tagsLength)];</span>
<span class="source-line-no">934</span><span id="line-934"></span>
<span class="source-line-no">935</span><span id="line-935">    // Write key, value and key row length.</span>
<span class="source-line-no">936</span><span id="line-936">    int pos = 0;</span>
<span class="source-line-no">937</span><span id="line-937">    pos = Bytes.putInt(bytes, pos, keyLength);</span>
<span class="source-line-no">938</span><span id="line-938"></span>
<span class="source-line-no">939</span><span id="line-939">    pos = Bytes.putInt(bytes, pos, vlength);</span>
<span class="source-line-no">940</span><span id="line-940">    pos = Bytes.putShort(bytes, pos, (short) (rlength &amp; 0x0000ffff));</span>
<span class="source-line-no">941</span><span id="line-941">    pos = Bytes.putBytes(bytes, pos, row, roffset, rlength);</span>
<span class="source-line-no">942</span><span id="line-942">    pos = Bytes.putByte(bytes, pos, (byte) (flength &amp; 0x0000ff));</span>
<span class="source-line-no">943</span><span id="line-943">    if (flength != 0) {</span>
<span class="source-line-no">944</span><span id="line-944">      pos = Bytes.putBytes(bytes, pos, family, foffset, flength);</span>
<span class="source-line-no">945</span><span id="line-945">    }</span>
<span class="source-line-no">946</span><span id="line-946">    if (qlength &gt; 0) {</span>
<span class="source-line-no">947</span><span id="line-947">      if (qualifier instanceof ByteBuffer) {</span>
<span class="source-line-no">948</span><span id="line-948">        pos = Bytes.putByteBuffer(bytes, pos, (ByteBuffer) qualifier);</span>
<span class="source-line-no">949</span><span id="line-949">      } else {</span>
<span class="source-line-no">950</span><span id="line-950">        pos = Bytes.putBytes(bytes, pos, (byte[]) qualifier, qoffset, qlength);</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">    pos = Bytes.putLong(bytes, pos, timestamp);</span>
<span class="source-line-no">954</span><span id="line-954">    pos = Bytes.putByte(bytes, pos, type.getCode());</span>
<span class="source-line-no">955</span><span id="line-955">    if (vlength &gt; 0) {</span>
<span class="source-line-no">956</span><span id="line-956">      if (value instanceof ByteBuffer) {</span>
<span class="source-line-no">957</span><span id="line-957">        pos = Bytes.putByteBuffer(bytes, pos, (ByteBuffer) value);</span>
<span class="source-line-no">958</span><span id="line-958">      } else {</span>
<span class="source-line-no">959</span><span id="line-959">        pos = Bytes.putBytes(bytes, pos, (byte[]) value, voffset, vlength);</span>
<span class="source-line-no">960</span><span id="line-960">      }</span>
<span class="source-line-no">961</span><span id="line-961">    }</span>
<span class="source-line-no">962</span><span id="line-962">    // Add the tags after the value part</span>
<span class="source-line-no">963</span><span id="line-963">    if (tagsLength &gt; 0) {</span>
<span class="source-line-no">964</span><span id="line-964">      pos = Bytes.putAsShort(bytes, pos, tagsLength);</span>
<span class="source-line-no">965</span><span id="line-965">      for (Tag t : tags) {</span>
<span class="source-line-no">966</span><span id="line-966">        int tlen = t.getValueLength();</span>
<span class="source-line-no">967</span><span id="line-967">        pos = Bytes.putAsShort(bytes, pos, tlen + Tag.TYPE_LENGTH_SIZE);</span>
<span class="source-line-no">968</span><span id="line-968">        pos = Bytes.putByte(bytes, pos, t.getType());</span>
<span class="source-line-no">969</span><span id="line-969">        Tag.copyValueTo(t, bytes, pos);</span>
<span class="source-line-no">970</span><span id="line-970">        pos += tlen;</span>
<span class="source-line-no">971</span><span id="line-971">      }</span>
<span class="source-line-no">972</span><span id="line-972">    }</span>
<span class="source-line-no">973</span><span id="line-973">    return bytes;</span>
<span class="source-line-no">974</span><span id="line-974">  }</span>
<span class="source-line-no">975</span><span id="line-975"></span>
<span class="source-line-no">976</span><span id="line-976">  /**</span>
<span class="source-line-no">977</span><span id="line-977">   * Needed doing 'contains' on List. Only compares the key portion, not the value.</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 boolean equals(Object other) {</span>
<span class="source-line-no">981</span><span id="line-981">    if (!(other instanceof ExtendedCell)) {</span>
<span class="source-line-no">982</span><span id="line-982">      return false;</span>
<span class="source-line-no">983</span><span id="line-983">    }</span>
<span class="source-line-no">984</span><span id="line-984">    return PrivateCellUtil.equals(this, (ExtendedCell) other);</span>
<span class="source-line-no">985</span><span id="line-985">  }</span>
<span class="source-line-no">986</span><span id="line-986"></span>
<span class="source-line-no">987</span><span id="line-987">  /**</span>
<span class="source-line-no">988</span><span id="line-988">   * In line with {@link #equals(Object)}, only uses the key portion, not the value.</span>
<span class="source-line-no">989</span><span id="line-989">   */</span>
<span class="source-line-no">990</span><span id="line-990">  @Override</span>
<span class="source-line-no">991</span><span id="line-991">  public int hashCode() {</span>
<span class="source-line-no">992</span><span id="line-992">    return calculateHashForKey(this);</span>
<span class="source-line-no">993</span><span id="line-993">  }</span>
<span class="source-line-no">994</span><span id="line-994"></span>
<span class="source-line-no">995</span><span id="line-995">  private int calculateHashForKey(ExtendedCell cell) {</span>
<span class="source-line-no">996</span><span id="line-996">    // pre-calculate the 3 hashes made of byte ranges</span>
<span class="source-line-no">997</span><span id="line-997">    int rowHash = Bytes.hashCode(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength());</span>
<span class="source-line-no">998</span><span id="line-998">    int familyHash =</span>
<span class="source-line-no">999</span><span id="line-999">      Bytes.hashCode(cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength());</span>
<span class="source-line-no">1000</span><span id="line-1000">    int qualifierHash = Bytes.hashCode(cell.getQualifierArray(), cell.getQualifierOffset(),</span>
<span class="source-line-no">1001</span><span id="line-1001">      cell.getQualifierLength());</span>
<span class="source-line-no">1002</span><span id="line-1002"></span>
<span class="source-line-no">1003</span><span id="line-1003">    // combine the 6 sub-hashes</span>
<span class="source-line-no">1004</span><span id="line-1004">    int hash = 31 * rowHash + familyHash;</span>
<span class="source-line-no">1005</span><span id="line-1005">    hash = 31 * hash + qualifierHash;</span>
<span class="source-line-no">1006</span><span id="line-1006">    hash = 31 * hash + (int) cell.getTimestamp();</span>
<span class="source-line-no">1007</span><span id="line-1007">    hash = 31 * hash + cell.getTypeByte();</span>
<span class="source-line-no">1008</span><span id="line-1008">    return hash;</span>
<span class="source-line-no">1009</span><span id="line-1009">  }</span>
<span class="source-line-no">1010</span><span id="line-1010"></span>
<span class="source-line-no">1011</span><span id="line-1011">  // ---------------------------------------------------------------------------</span>
<span class="source-line-no">1012</span><span id="line-1012">  //</span>
<span class="source-line-no">1013</span><span id="line-1013">  // KeyValue cloning</span>
<span class="source-line-no">1014</span><span id="line-1014">  //</span>
<span class="source-line-no">1015</span><span id="line-1015">  // ---------------------------------------------------------------------------</span>
<span class="source-line-no">1016</span><span id="line-1016"></span>
<span class="source-line-no">1017</span><span id="line-1017">  /**</span>
<span class="source-line-no">1018</span><span id="line-1018">   * Clones a KeyValue. This creates a copy, re-allocating the buffer.</span>
<span class="source-line-no">1019</span><span id="line-1019">   * @return Fully copied clone of this KeyValue</span>
<span class="source-line-no">1020</span><span id="line-1020">   * @throws CloneNotSupportedException if cloning of keyValue is not supported</span>
<span class="source-line-no">1021</span><span id="line-1021">   */</span>
<span class="source-line-no">1022</span><span id="line-1022">  @Override</span>
<span class="source-line-no">1023</span><span id="line-1023">  public KeyValue clone() throws CloneNotSupportedException {</span>
<span class="source-line-no">1024</span><span id="line-1024">    KeyValue ret = (KeyValue) super.clone();</span>
<span class="source-line-no">1025</span><span id="line-1025">    ret.bytes = Arrays.copyOf(this.bytes, this.bytes.length);</span>
<span class="source-line-no">1026</span><span id="line-1026">    ret.offset = 0;</span>
<span class="source-line-no">1027</span><span id="line-1027">    ret.length = ret.bytes.length;</span>
<span class="source-line-no">1028</span><span id="line-1028">    // Important to clone the memstoreTS as well - otherwise memstore's</span>
<span class="source-line-no">1029</span><span id="line-1029">    // update-in-place methods (eg increment) will end up creating</span>
<span class="source-line-no">1030</span><span id="line-1030">    // new entries</span>
<span class="source-line-no">1031</span><span id="line-1031">    ret.setSequenceId(seqId);</span>
<span class="source-line-no">1032</span><span id="line-1032">    return ret;</span>
<span class="source-line-no">1033</span><span id="line-1033">  }</span>
<span class="source-line-no">1034</span><span id="line-1034"></span>
<span class="source-line-no">1035</span><span id="line-1035">  /**</span>
<span class="source-line-no">1036</span><span id="line-1036">   * Creates a shallow copy of this KeyValue, reusing the data byte buffer.</span>
<span class="source-line-no">1037</span><span id="line-1037">   * http://en.wikipedia.org/wiki/Object_copy</span>
<span class="source-line-no">1038</span><span id="line-1038">   * @return Shallow copy of this KeyValue</span>
<span class="source-line-no">1039</span><span id="line-1039">   */</span>
<span class="source-line-no">1040</span><span id="line-1040">  public KeyValue shallowCopy() {</span>
<span class="source-line-no">1041</span><span id="line-1041">    KeyValue shallowCopy = new KeyValue(this.bytes, this.offset, this.length);</span>
<span class="source-line-no">1042</span><span id="line-1042">    shallowCopy.setSequenceId(this.seqId);</span>
<span class="source-line-no">1043</span><span id="line-1043">    return shallowCopy;</span>
<span class="source-line-no">1044</span><span id="line-1044">  }</span>
<span class="source-line-no">1045</span><span id="line-1045"></span>
<span class="source-line-no">1046</span><span id="line-1046">  // ---------------------------------------------------------------------------</span>
<span class="source-line-no">1047</span><span id="line-1047">  //</span>
<span class="source-line-no">1048</span><span id="line-1048">  // String representation</span>
<span class="source-line-no">1049</span><span id="line-1049">  //</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">  @Override</span>
<span class="source-line-no">1053</span><span id="line-1053">  public String toString() {</span>
<span class="source-line-no">1054</span><span id="line-1054">    if (this.bytes == null || this.bytes.length == 0) {</span>
<span class="source-line-no">1055</span><span id="line-1055">      return "empty";</span>
<span class="source-line-no">1056</span><span id="line-1056">    }</span>
<span class="source-line-no">1057</span><span id="line-1057">    return keyToString(this.bytes, this.offset + ROW_OFFSET, getKeyLength()) + "/vlen="</span>
<span class="source-line-no">1058</span><span id="line-1058">      + getValueLength() + "/seqid=" + seqId;</span>
<span class="source-line-no">1059</span><span id="line-1059">  }</span>
<span class="source-line-no">1060</span><span id="line-1060"></span>
<span class="source-line-no">1061</span><span id="line-1061">  /** Return key as a String, empty string if k is null. */</span>
<span class="source-line-no">1062</span><span id="line-1062">  public static String keyToString(final byte[] k) {</span>
<span class="source-line-no">1063</span><span id="line-1063">    if (k == null) {</span>
<span class="source-line-no">1064</span><span id="line-1064">      return "";</span>
<span class="source-line-no">1065</span><span id="line-1065">    }</span>
<span class="source-line-no">1066</span><span id="line-1066">    return keyToString(k, 0, k.length);</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">   * Produces a string map for this key/value pair. Useful for programmatic use and manipulation of</span>
<span class="source-line-no">1071</span><span id="line-1071">   * the data stored in an WALKey, for example, printing as JSON. Values are left out due to their</span>
<span class="source-line-no">1072</span><span id="line-1072">   * tendency to be large. If needed, they can be added manually.</span>
<span class="source-line-no">1073</span><span id="line-1073">   * @return the Map&amp;lt;String,?&amp;gt; containing data from this key</span>
<span class="source-line-no">1074</span><span id="line-1074">   */</span>
<span class="source-line-no">1075</span><span id="line-1075">  public Map&lt;String, Object&gt; toStringMap() {</span>
<span class="source-line-no">1076</span><span id="line-1076">    Map&lt;String, Object&gt; stringMap = new HashMap&lt;&gt;();</span>
<span class="source-line-no">1077</span><span id="line-1077">    stringMap.put("row", Bytes.toStringBinary(getRowArray(), getRowOffset(), getRowLength()));</span>
<span class="source-line-no">1078</span><span id="line-1078">    stringMap.put("family",</span>
<span class="source-line-no">1079</span><span id="line-1079">      Bytes.toStringBinary(getFamilyArray(), getFamilyOffset(), getFamilyLength()));</span>
<span class="source-line-no">1080</span><span id="line-1080">    stringMap.put("qualifier",</span>
<span class="source-line-no">1081</span><span id="line-1081">      Bytes.toStringBinary(getQualifierArray(), getQualifierOffset(), getQualifierLength()));</span>
<span class="source-line-no">1082</span><span id="line-1082">    stringMap.put("timestamp", getTimestamp());</span>
<span class="source-line-no">1083</span><span id="line-1083">    stringMap.put("vlen", getValueLength());</span>
<span class="source-line-no">1084</span><span id="line-1084">    Iterator&lt;Tag&gt; tags = getTags();</span>
<span class="source-line-no">1085</span><span id="line-1085">    if (tags != null) {</span>
<span class="source-line-no">1086</span><span id="line-1086">      List&lt;String&gt; tagsString = new ArrayList&lt;String&gt;();</span>
<span class="source-line-no">1087</span><span id="line-1087">      while (tags.hasNext()) {</span>
<span class="source-line-no">1088</span><span id="line-1088">        tagsString.add(tags.next().toString());</span>
<span class="source-line-no">1089</span><span id="line-1089">      }</span>
<span class="source-line-no">1090</span><span id="line-1090">      stringMap.put("tag", tagsString);</span>
<span class="source-line-no">1091</span><span id="line-1091">    }</span>
<span class="source-line-no">1092</span><span id="line-1092">    return stringMap;</span>
<span class="source-line-no">1093</span><span id="line-1093">  }</span>
<span class="source-line-no">1094</span><span id="line-1094"></span>
<span class="source-line-no">1095</span><span id="line-1095">  /**</span>
<span class="source-line-no">1096</span><span id="line-1096">   * Use for logging.</span>
<span class="source-line-no">1097</span><span id="line-1097">   * @param b Key portion of a KeyValue.</span>
<span class="source-line-no">1098</span><span id="line-1098">   * @param o Offset to start of key</span>
<span class="source-line-no">1099</span><span id="line-1099">   * @param l Length of key.</span>
<span class="source-line-no">1100</span><span id="line-1100">   * @return Key as a String.</span>
<span class="source-line-no">1101</span><span id="line-1101">   */</span>
<span class="source-line-no">1102</span><span id="line-1102">  public static String keyToString(final byte[] b, final int o, final int l) {</span>
<span class="source-line-no">1103</span><span id="line-1103">    if (b == null) {</span>
<span class="source-line-no">1104</span><span id="line-1104">      return "";</span>
<span class="source-line-no">1105</span><span id="line-1105">    }</span>
<span class="source-line-no">1106</span><span id="line-1106">    int rowlength = Bytes.toShort(b, o);</span>
<span class="source-line-no">1107</span><span id="line-1107">    String row = Bytes.toStringBinary(b, o + Bytes.SIZEOF_SHORT, rowlength);</span>
<span class="source-line-no">1108</span><span id="line-1108">    int columnoffset = o + Bytes.SIZEOF_SHORT + 1 + rowlength;</span>
<span class="source-line-no">1109</span><span id="line-1109">    int familylength = b[columnoffset - 1];</span>
<span class="source-line-no">1110</span><span id="line-1110">    int columnlength = l - ((columnoffset - o) + TIMESTAMP_TYPE_SIZE);</span>
<span class="source-line-no">1111</span><span id="line-1111">    String family = familylength == 0 ? "" : Bytes.toStringBinary(b, columnoffset, familylength);</span>
<span class="source-line-no">1112</span><span id="line-1112">    String qualifier = columnlength == 0</span>
<span class="source-line-no">1113</span><span id="line-1113">      ? ""</span>
<span class="source-line-no">1114</span><span id="line-1114">      : Bytes.toStringBinary(b, columnoffset + familylength, columnlength - familylength);</span>
<span class="source-line-no">1115</span><span id="line-1115">    long timestamp = Bytes.toLong(b, o + (l - TIMESTAMP_TYPE_SIZE));</span>
<span class="source-line-no">1116</span><span id="line-1116">    String timestampStr = humanReadableTimestamp(timestamp);</span>
<span class="source-line-no">1117</span><span id="line-1117">    byte type = b[o + l - 1];</span>
<span class="source-line-no">1118</span><span id="line-1118">    return row + "/" + family + (family != null &amp;&amp; family.length() &gt; 0 ? ":" : "") + qualifier + "/"</span>
<span class="source-line-no">1119</span><span id="line-1119">      + timestampStr + "/" + Type.codeToType(type);</span>
<span class="source-line-no">1120</span><span id="line-1120">  }</span>
<span class="source-line-no">1121</span><span id="line-1121"></span>
<span class="source-line-no">1122</span><span id="line-1122">  public static String humanReadableTimestamp(final long timestamp) {</span>
<span class="source-line-no">1123</span><span id="line-1123">    if (timestamp == HConstants.LATEST_TIMESTAMP) {</span>
<span class="source-line-no">1124</span><span id="line-1124">      return "LATEST_TIMESTAMP";</span>
<span class="source-line-no">1125</span><span id="line-1125">    }</span>
<span class="source-line-no">1126</span><span id="line-1126">    if (timestamp == PrivateConstants.OLDEST_TIMESTAMP) {</span>
<span class="source-line-no">1127</span><span id="line-1127">      return "OLDEST_TIMESTAMP";</span>
<span class="source-line-no">1128</span><span id="line-1128">    }</span>
<span class="source-line-no">1129</span><span id="line-1129">    return String.valueOf(timestamp);</span>
<span class="source-line-no">1130</span><span id="line-1130">  }</span>
<span class="source-line-no">1131</span><span id="line-1131"></span>
<span class="source-line-no">1132</span><span id="line-1132">  // ---------------------------------------------------------------------------</span>
<span class="source-line-no">1133</span><span id="line-1133">  //</span>
<span class="source-line-no">1134</span><span id="line-1134">  // Public Member Accessors</span>
<span class="source-line-no">1135</span><span id="line-1135">  //</span>
<span class="source-line-no">1136</span><span id="line-1136">  // ---------------------------------------------------------------------------</span>
<span class="source-line-no">1137</span><span id="line-1137"></span>
<span class="source-line-no">1138</span><span id="line-1138">  /**</span>
<span class="source-line-no">1139</span><span id="line-1139">   * To be used only in tests where the Cells are clearly assumed to be of type KeyValue and that we</span>
<span class="source-line-no">1140</span><span id="line-1140">   * need access to the backing array to do some test case related assertions.</span>
<span class="source-line-no">1141</span><span id="line-1141">   * @return The byte array backing this KeyValue.</span>
<span class="source-line-no">1142</span><span id="line-1142">   */</span>
<span class="source-line-no">1143</span><span id="line-1143">  public byte[] getBuffer() {</span>
<span class="source-line-no">1144</span><span id="line-1144">    return this.bytes;</span>
<span class="source-line-no">1145</span><span id="line-1145">  }</span>
<span class="source-line-no">1146</span><span id="line-1146"></span>
<span class="source-line-no">1147</span><span id="line-1147">  /** Returns Offset into {@link #getBuffer()} at which this KeyValue starts. */</span>
<span class="source-line-no">1148</span><span id="line-1148">  public int getOffset() {</span>
<span class="source-line-no">1149</span><span id="line-1149">    return this.offset;</span>
<span class="source-line-no">1150</span><span id="line-1150">  }</span>
<span class="source-line-no">1151</span><span id="line-1151"></span>
<span class="source-line-no">1152</span><span id="line-1152">  /** Returns Length of bytes this KeyValue occupies in {@link #getBuffer()}. */</span>
<span class="source-line-no">1153</span><span id="line-1153">  public int getLength() {</span>
<span class="source-line-no">1154</span><span id="line-1154">    return length;</span>
<span class="source-line-no">1155</span><span id="line-1155">  }</span>
<span class="source-line-no">1156</span><span id="line-1156"></span>
<span class="source-line-no">1157</span><span id="line-1157">  // ---------------------------------------------------------------------------</span>
<span class="source-line-no">1158</span><span id="line-1158">  //</span>
<span class="source-line-no">1159</span><span id="line-1159">  // Length and Offset Calculators</span>
<span class="source-line-no">1160</span><span id="line-1160">  //</span>
<span class="source-line-no">1161</span><span id="line-1161">  // ---------------------------------------------------------------------------</span>
<span class="source-line-no">1162</span><span id="line-1162"></span>
<span class="source-line-no">1163</span><span id="line-1163">  /**</span>
<span class="source-line-no">1164</span><span id="line-1164">   * Determines the total length of the KeyValue stored in the specified byte array and offset.</span>
<span class="source-line-no">1165</span><span id="line-1165">   * Includes all headers.</span>
<span class="source-line-no">1166</span><span id="line-1166">   * @param bytes  byte array</span>
<span class="source-line-no">1167</span><span id="line-1167">   * @param offset offset to start of the KeyValue</span>
<span class="source-line-no">1168</span><span id="line-1168">   * @return length of entire KeyValue, in bytes</span>
<span class="source-line-no">1169</span><span id="line-1169">   */</span>
<span class="source-line-no">1170</span><span id="line-1170">  private static int getLength(byte[] bytes, int offset) {</span>
<span class="source-line-no">1171</span><span id="line-1171">    int klength = ROW_OFFSET + Bytes.toInt(bytes, offset);</span>
<span class="source-line-no">1172</span><span id="line-1172">    int vlength = Bytes.toInt(bytes, offset + Bytes.SIZEOF_INT);</span>
<span class="source-line-no">1173</span><span id="line-1173">    return klength + vlength;</span>
<span class="source-line-no">1174</span><span id="line-1174">  }</span>
<span class="source-line-no">1175</span><span id="line-1175"></span>
<span class="source-line-no">1176</span><span id="line-1176">  /** Returns Key offset in backing buffer.. */</span>
<span class="source-line-no">1177</span><span id="line-1177">  public int getKeyOffset() {</span>
<span class="source-line-no">1178</span><span id="line-1178">    return this.offset + ROW_OFFSET;</span>
<span class="source-line-no">1179</span><span id="line-1179">  }</span>
<span class="source-line-no">1180</span><span id="line-1180"></span>
<span class="source-line-no">1181</span><span id="line-1181">  public String getKeyString() {</span>
<span class="source-line-no">1182</span><span id="line-1182">    return Bytes.toStringBinary(getBuffer(), getKeyOffset(), getKeyLength());</span>
<span class="source-line-no">1183</span><span id="line-1183">  }</span>
<span class="source-line-no">1184</span><span id="line-1184"></span>
<span class="source-line-no">1185</span><span id="line-1185">  /** Returns Length of key portion. */</span>
<span class="source-line-no">1186</span><span id="line-1186">  public int getKeyLength() {</span>
<span class="source-line-no">1187</span><span id="line-1187">    return Bytes.toInt(this.bytes, this.offset);</span>
<span class="source-line-no">1188</span><span id="line-1188">  }</span>
<span class="source-line-no">1189</span><span id="line-1189"></span>
<span class="source-line-no">1190</span><span id="line-1190">  /**</span>
<span class="source-line-no">1191</span><span id="line-1191">   * Returns the backing array of the entire KeyValue (all KeyValue fields are in a single array)</span>
<span class="source-line-no">1192</span><span id="line-1192">   */</span>
<span class="source-line-no">1193</span><span id="line-1193">  @Override</span>
<span class="source-line-no">1194</span><span id="line-1194">  public byte[] getValueArray() {</span>
<span class="source-line-no">1195</span><span id="line-1195">    return bytes;</span>
<span class="source-line-no">1196</span><span id="line-1196">  }</span>
<span class="source-line-no">1197</span><span id="line-1197"></span>
<span class="source-line-no">1198</span><span id="line-1198">  /** Returns the value offset */</span>
<span class="source-line-no">1199</span><span id="line-1199">  @Override</span>
<span class="source-line-no">1200</span><span id="line-1200">  public int getValueOffset() {</span>
<span class="source-line-no">1201</span><span id="line-1201">    int voffset = getKeyOffset() + getKeyLength();</span>
<span class="source-line-no">1202</span><span id="line-1202">    return voffset;</span>
<span class="source-line-no">1203</span><span id="line-1203">  }</span>
<span class="source-line-no">1204</span><span id="line-1204"></span>
<span class="source-line-no">1205</span><span id="line-1205">  /** Returns Value length */</span>
<span class="source-line-no">1206</span><span id="line-1206">  @Override</span>
<span class="source-line-no">1207</span><span id="line-1207">  public int getValueLength() {</span>
<span class="source-line-no">1208</span><span id="line-1208">    int vlength = Bytes.toInt(this.bytes, this.offset + Bytes.SIZEOF_INT);</span>
<span class="source-line-no">1209</span><span id="line-1209">    return vlength;</span>
<span class="source-line-no">1210</span><span id="line-1210">  }</span>
<span class="source-line-no">1211</span><span id="line-1211"></span>
<span class="source-line-no">1212</span><span id="line-1212">  /**</span>
<span class="source-line-no">1213</span><span id="line-1213">   * Returns the backing array of the entire KeyValue (all KeyValue fields are in a single array)</span>
<span class="source-line-no">1214</span><span id="line-1214">   */</span>
<span class="source-line-no">1215</span><span id="line-1215">  @Override</span>
<span class="source-line-no">1216</span><span id="line-1216">  public byte[] getRowArray() {</span>
<span class="source-line-no">1217</span><span id="line-1217">    return bytes;</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">  /** Returns Row offset */</span>
<span class="source-line-no">1221</span><span id="line-1221">  @Override</span>
<span class="source-line-no">1222</span><span id="line-1222">  public int getRowOffset() {</span>
<span class="source-line-no">1223</span><span id="line-1223">    return this.offset + ROW_KEY_OFFSET;</span>
<span class="source-line-no">1224</span><span id="line-1224">  }</span>
<span class="source-line-no">1225</span><span id="line-1225"></span>
<span class="source-line-no">1226</span><span id="line-1226">  /** Returns Row length */</span>
<span class="source-line-no">1227</span><span id="line-1227">  @Override</span>
<span class="source-line-no">1228</span><span id="line-1228">  public short getRowLength() {</span>
<span class="source-line-no">1229</span><span id="line-1229">    return Bytes.toShort(this.bytes, getKeyOffset());</span>
<span class="source-line-no">1230</span><span id="line-1230">  }</span>
<span class="source-line-no">1231</span><span id="line-1231"></span>
<span class="source-line-no">1232</span><span id="line-1232">  /**</span>
<span class="source-line-no">1233</span><span id="line-1233">   * Returns the backing array of the entire KeyValue (all KeyValue fields are in a single array)</span>
<span class="source-line-no">1234</span><span id="line-1234">   */</span>
<span class="source-line-no">1235</span><span id="line-1235">  @Override</span>
<span class="source-line-no">1236</span><span id="line-1236">  public byte[] getFamilyArray() {</span>
<span class="source-line-no">1237</span><span id="line-1237">    return bytes;</span>
<span class="source-line-no">1238</span><span id="line-1238">  }</span>
<span class="source-line-no">1239</span><span id="line-1239"></span>
<span class="source-line-no">1240</span><span id="line-1240">  /** Returns Family offset */</span>
<span class="source-line-no">1241</span><span id="line-1241">  @Override</span>
<span class="source-line-no">1242</span><span id="line-1242">  public int getFamilyOffset() {</span>
<span class="source-line-no">1243</span><span id="line-1243">    return getFamilyOffset(getFamilyLengthPosition(getRowLength()));</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">  /** Returns Family offset */</span>
<span class="source-line-no">1247</span><span id="line-1247">  int getFamilyOffset(int familyLenPosition) {</span>
<span class="source-line-no">1248</span><span id="line-1248">    return familyLenPosition + Bytes.SIZEOF_BYTE;</span>
<span class="source-line-no">1249</span><span id="line-1249">  }</span>
<span class="source-line-no">1250</span><span id="line-1250"></span>
<span class="source-line-no">1251</span><span id="line-1251">  /** Returns Family length */</span>
<span class="source-line-no">1252</span><span id="line-1252">  @Override</span>
<span class="source-line-no">1253</span><span id="line-1253">  public byte getFamilyLength() {</span>
<span class="source-line-no">1254</span><span id="line-1254">    return getFamilyLength(getFamilyLengthPosition(getRowLength()));</span>
<span class="source-line-no">1255</span><span id="line-1255">  }</span>
<span class="source-line-no">1256</span><span id="line-1256"></span>
<span class="source-line-no">1257</span><span id="line-1257">  /** Returns Family length */</span>
<span class="source-line-no">1258</span><span id="line-1258">  public byte getFamilyLength(int famLenPos) {</span>
<span class="source-line-no">1259</span><span id="line-1259">    return this.bytes[famLenPos];</span>
<span class="source-line-no">1260</span><span id="line-1260">  }</span>
<span class="source-line-no">1261</span><span id="line-1261"></span>
<span class="source-line-no">1262</span><span id="line-1262">  int getFamilyLengthPosition(int rowLength) {</span>
<span class="source-line-no">1263</span><span id="line-1263">    return this.offset + KeyValue.ROW_KEY_OFFSET + rowLength;</span>
<span class="source-line-no">1264</span><span id="line-1264">  }</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">   * Returns the backing array of the entire KeyValue (all KeyValue fields are in a single array)</span>
<span class="source-line-no">1268</span><span id="line-1268">   */</span>
<span class="source-line-no">1269</span><span id="line-1269">  @Override</span>
<span class="source-line-no">1270</span><span id="line-1270">  public byte[] getQualifierArray() {</span>
<span class="source-line-no">1271</span><span id="line-1271">    return bytes;</span>
<span class="source-line-no">1272</span><span id="line-1272">  }</span>
<span class="source-line-no">1273</span><span id="line-1273"></span>
<span class="source-line-no">1274</span><span id="line-1274">  /** Returns Qualifier offset */</span>
<span class="source-line-no">1275</span><span id="line-1275">  @Override</span>
<span class="source-line-no">1276</span><span id="line-1276">  public int getQualifierOffset() {</span>
<span class="source-line-no">1277</span><span id="line-1277">    return getQualifierOffset(getFamilyOffset());</span>
<span class="source-line-no">1278</span><span id="line-1278">  }</span>
<span class="source-line-no">1279</span><span id="line-1279"></span>
<span class="source-line-no">1280</span><span id="line-1280">  /** Returns Qualifier offset */</span>
<span class="source-line-no">1281</span><span id="line-1281">  private int getQualifierOffset(int foffset) {</span>
<span class="source-line-no">1282</span><span id="line-1282">    return getQualifierOffset(foffset, getFamilyLength());</span>
<span class="source-line-no">1283</span><span id="line-1283">  }</span>
<span class="source-line-no">1284</span><span id="line-1284"></span>
<span class="source-line-no">1285</span><span id="line-1285">  /** Returns Qualifier offset */</span>
<span class="source-line-no">1286</span><span id="line-1286">  int getQualifierOffset(int foffset, int flength) {</span>
<span class="source-line-no">1287</span><span id="line-1287">    return foffset + flength;</span>
<span class="source-line-no">1288</span><span id="line-1288">  }</span>
<span class="source-line-no">1289</span><span id="line-1289"></span>
<span class="source-line-no">1290</span><span id="line-1290">  /** Returns Qualifier length */</span>
<span class="source-line-no">1291</span><span id="line-1291">  @Override</span>
<span class="source-line-no">1292</span><span id="line-1292">  public int getQualifierLength() {</span>
<span class="source-line-no">1293</span><span id="line-1293">    return getQualifierLength(getRowLength(), getFamilyLength());</span>
<span class="source-line-no">1294</span><span id="line-1294">  }</span>
<span class="source-line-no">1295</span><span id="line-1295"></span>
<span class="source-line-no">1296</span><span id="line-1296">  /** Returns Qualifier length */</span>
<span class="source-line-no">1297</span><span id="line-1297">  private int getQualifierLength(int rlength, int flength) {</span>
<span class="source-line-no">1298</span><span id="line-1298">    return getQualifierLength(getKeyLength(), rlength, flength);</span>
<span class="source-line-no">1299</span><span id="line-1299">  }</span>
<span class="source-line-no">1300</span><span id="line-1300"></span>
<span class="source-line-no">1301</span><span id="line-1301">  /** Returns Qualifier length */</span>
<span class="source-line-no">1302</span><span id="line-1302">  int getQualifierLength(int keyLength, int rlength, int flength) {</span>
<span class="source-line-no">1303</span><span id="line-1303">    return keyLength - (int) getKeyDataStructureSize(rlength, flength, 0);</span>
<span class="source-line-no">1304</span><span id="line-1304">  }</span>
<span class="source-line-no">1305</span><span id="line-1305"></span>
<span class="source-line-no">1306</span><span id="line-1306">  /** Returns Timestamp offset */</span>
<span class="source-line-no">1307</span><span id="line-1307">  public int getTimestampOffset() {</span>
<span class="source-line-no">1308</span><span id="line-1308">    return getTimestampOffset(getKeyLength());</span>
<span class="source-line-no">1309</span><span id="line-1309">  }</span>
<span class="source-line-no">1310</span><span id="line-1310"></span>
<span class="source-line-no">1311</span><span id="line-1311">  /** Return the timestamp offset */</span>
<span class="source-line-no">1312</span><span id="line-1312">  private int getTimestampOffset(final int keylength) {</span>
<span class="source-line-no">1313</span><span id="line-1313">    return getKeyOffset() + keylength - TIMESTAMP_TYPE_SIZE;</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">  /** Returns True if this KeyValue has a LATEST_TIMESTAMP timestamp. */</span>
<span class="source-line-no">1317</span><span id="line-1317">  public boolean isLatestTimestamp() {</span>
<span class="source-line-no">1318</span><span id="line-1318">    return Bytes.equals(getBuffer(), getTimestampOffset(), Bytes.SIZEOF_LONG,</span>
<span class="source-line-no">1319</span><span id="line-1319">      HConstants.LATEST_TIMESTAMP_BYTES, 0, Bytes.SIZEOF_LONG);</span>
<span class="source-line-no">1320</span><span id="line-1320">  }</span>
<span class="source-line-no">1321</span><span id="line-1321"></span>
<span class="source-line-no">1322</span><span id="line-1322">  /**</span>
<span class="source-line-no">1323</span><span id="line-1323">   * Update the timestamp.</span>
<span class="source-line-no">1324</span><span id="line-1324">   * @param now Time to set into &lt;code&gt;this&lt;/code&gt; IFF timestamp ==</span>
<span class="source-line-no">1325</span><span id="line-1325">   *            {@link HConstants#LATEST_TIMESTAMP} (else, its a noop).</span>
<span class="source-line-no">1326</span><span id="line-1326">   * @return True is we modified this.</span>
<span class="source-line-no">1327</span><span id="line-1327">   */</span>
<span class="source-line-no">1328</span><span id="line-1328">  public boolean updateLatestStamp(final byte[] now) {</span>
<span class="source-line-no">1329</span><span id="line-1329">    if (this.isLatestTimestamp()) {</span>
<span class="source-line-no">1330</span><span id="line-1330">      int tsOffset = getTimestampOffset();</span>
<span class="source-line-no">1331</span><span id="line-1331">      System.arraycopy(now, 0, this.bytes, tsOffset, Bytes.SIZEOF_LONG);</span>
<span class="source-line-no">1332</span><span id="line-1332">      // clear cache or else getTimestamp() possibly returns an old value</span>
<span class="source-line-no">1333</span><span id="line-1333">      return true;</span>
<span class="source-line-no">1334</span><span id="line-1334">    }</span>
<span class="source-line-no">1335</span><span id="line-1335">    return false;</span>
<span class="source-line-no">1336</span><span id="line-1336">  }</span>
<span class="source-line-no">1337</span><span id="line-1337"></span>
<span class="source-line-no">1338</span><span id="line-1338">  @Override</span>
<span class="source-line-no">1339</span><span id="line-1339">  public void setTimestamp(long ts) {</span>
<span class="source-line-no">1340</span><span id="line-1340">    Bytes.putBytes(this.bytes, this.getTimestampOffset(), Bytes.toBytes(ts), 0, Bytes.SIZEOF_LONG);</span>
<span class="source-line-no">1341</span><span id="line-1341">  }</span>
<span class="source-line-no">1342</span><span id="line-1342"></span>
<span class="source-line-no">1343</span><span id="line-1343">  @Override</span>
<span class="source-line-no">1344</span><span id="line-1344">  public void setTimestamp(byte[] ts) {</span>
<span class="source-line-no">1345</span><span id="line-1345">    Bytes.putBytes(this.bytes, this.getTimestampOffset(), ts, 0, Bytes.SIZEOF_LONG);</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">  // ---------------------------------------------------------------------------</span>
<span class="source-line-no">1349</span><span id="line-1349">  //</span>
<span class="source-line-no">1350</span><span id="line-1350">  // Methods that return copies of fields</span>
<span class="source-line-no">1351</span><span id="line-1351">  //</span>
<span class="source-line-no">1352</span><span id="line-1352">  // ---------------------------------------------------------------------------</span>
<span class="source-line-no">1353</span><span id="line-1353"></span>
<span class="source-line-no">1354</span><span id="line-1354">  /**</span>
<span class="source-line-no">1355</span><span id="line-1355">   * Do not use unless you have to. Used internally for compacting and testing. Use</span>
<span class="source-line-no">1356</span><span id="line-1356">   * {@link #getRowArray()}, {@link #getFamilyArray()}, {@link #getQualifierArray()}, and</span>
<span class="source-line-no">1357</span><span id="line-1357">   * {@link #getValueArray()} if accessing a KeyValue client-side.</span>
<span class="source-line-no">1358</span><span id="line-1358">   * @return Copy of the key portion only.</span>
<span class="source-line-no">1359</span><span id="line-1359">   */</span>
<span class="source-line-no">1360</span><span id="line-1360">  public byte[] getKey() {</span>
<span class="source-line-no">1361</span><span id="line-1361">    int keylength = getKeyLength();</span>
<span class="source-line-no">1362</span><span id="line-1362">    byte[] key = new byte[keylength];</span>
<span class="source-line-no">1363</span><span id="line-1363">    System.arraycopy(getBuffer(), getKeyOffset(), key, 0, keylength);</span>
<span class="source-line-no">1364</span><span id="line-1364">    return key;</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">  /** Return the timestamp. */</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 long getTimestamp() {</span>
<span class="source-line-no">1370</span><span id="line-1370">    return getTimestamp(getKeyLength());</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">  /** Return the timestamp. */</span>
<span class="source-line-no">1374</span><span id="line-1374">  long getTimestamp(final int keylength) {</span>
<span class="source-line-no">1375</span><span id="line-1375">    int tsOffset = getTimestampOffset(keylength);</span>
<span class="source-line-no">1376</span><span id="line-1376">    return Bytes.toLong(this.bytes, tsOffset);</span>
<span class="source-line-no">1377</span><span id="line-1377">  }</span>
<span class="source-line-no">1378</span><span id="line-1378"></span>
<span class="source-line-no">1379</span><span id="line-1379">  /** Returns KeyValue.TYPE byte representation */</span>
<span class="source-line-no">1380</span><span id="line-1380">  @Override</span>
<span class="source-line-no">1381</span><span id="line-1381">  public byte getTypeByte() {</span>
<span class="source-line-no">1382</span><span id="line-1382">    return getTypeByte(getKeyLength());</span>
<span class="source-line-no">1383</span><span id="line-1383">  }</span>
<span class="source-line-no">1384</span><span id="line-1384"></span>
<span class="source-line-no">1385</span><span id="line-1385">  /** Return the KeyValue.TYPE byte representation */</span>
<span class="source-line-no">1386</span><span id="line-1386">  byte getTypeByte(int keyLength) {</span>
<span class="source-line-no">1387</span><span id="line-1387">    return this.bytes[this.offset + keyLength - 1 + ROW_OFFSET];</span>
<span class="source-line-no">1388</span><span id="line-1388">  }</span>
<span class="source-line-no">1389</span><span id="line-1389"></span>
<span class="source-line-no">1390</span><span id="line-1390">  /** Return the offset where the tag data starts. */</span>
<span class="source-line-no">1391</span><span id="line-1391">  @Override</span>
<span class="source-line-no">1392</span><span id="line-1392">  public int getTagsOffset() {</span>
<span class="source-line-no">1393</span><span id="line-1393">    int tagsLen = getTagsLength();</span>
<span class="source-line-no">1394</span><span id="line-1394">    if (tagsLen == 0) {</span>
<span class="source-line-no">1395</span><span id="line-1395">      return this.offset + this.length;</span>
<span class="source-line-no">1396</span><span id="line-1396">    }</span>
<span class="source-line-no">1397</span><span id="line-1397">    return this.offset + this.length - tagsLen;</span>
<span class="source-line-no">1398</span><span id="line-1398">  }</span>
<span class="source-line-no">1399</span><span id="line-1399"></span>
<span class="source-line-no">1400</span><span id="line-1400">  /** Return the total length of the tag bytes */</span>
<span class="source-line-no">1401</span><span id="line-1401">  @Override</span>
<span class="source-line-no">1402</span><span id="line-1402">  public int getTagsLength() {</span>
<span class="source-line-no">1403</span><span id="line-1403">    int tagsLen = this.length - (getKeyLength() + getValueLength() + KEYVALUE_INFRASTRUCTURE_SIZE);</span>
<span class="source-line-no">1404</span><span id="line-1404">    if (tagsLen &gt; 0) {</span>
<span class="source-line-no">1405</span><span id="line-1405">      // There are some Tag bytes in the byte[]. So reduce 2 bytes which is added to denote the tags</span>
<span class="source-line-no">1406</span><span id="line-1406">      // length</span>
<span class="source-line-no">1407</span><span id="line-1407">      tagsLen -= TAGS_LENGTH_SIZE;</span>
<span class="source-line-no">1408</span><span id="line-1408">    }</span>
<span class="source-line-no">1409</span><span id="line-1409">    return tagsLen;</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">  /**</span>
<span class="source-line-no">1413</span><span id="line-1413">   * Returns the backing array of the entire KeyValue (all KeyValue fields are in a single array)</span>
<span class="source-line-no">1414</span><span id="line-1414">   */</span>
<span class="source-line-no">1415</span><span id="line-1415">  @Override</span>
<span class="source-line-no">1416</span><span id="line-1416">  public byte[] getTagsArray() {</span>
<span class="source-line-no">1417</span><span id="line-1417">    return bytes;</span>
<span class="source-line-no">1418</span><span id="line-1418">  }</span>
<span class="source-line-no">1419</span><span id="line-1419"></span>
<span class="source-line-no">1420</span><span id="line-1420">  /**</span>
<span class="source-line-no">1421</span><span id="line-1421">   * Creates a new KeyValue that only contains the key portion (the value is set to be null). TODO</span>
<span class="source-line-no">1422</span><span id="line-1422">   * only used by KeyOnlyFilter -- move there.</span>
<span class="source-line-no">1423</span><span id="line-1423">   * @param lenAsVal replace value with the actual value length (false=empty)</span>
<span class="source-line-no">1424</span><span id="line-1424">   */</span>
<span class="source-line-no">1425</span><span id="line-1425">  public KeyValue createKeyOnly(boolean lenAsVal) {</span>
<span class="source-line-no">1426</span><span id="line-1426">    // KV format: &lt;keylen:4&gt;&lt;valuelen:4&gt;&lt;key:keylen&gt;&lt;value:valuelen&gt;</span>
<span class="source-line-no">1427</span><span id="line-1427">    // Rebuild as: &lt;keylen:4&gt;&lt;0:4&gt;&lt;key:keylen&gt;</span>
<span class="source-line-no">1428</span><span id="line-1428">    int dataLen = lenAsVal ? Bytes.SIZEOF_INT : 0;</span>
<span class="source-line-no">1429</span><span id="line-1429">    byte[] newBuffer = new byte[getKeyLength() + ROW_OFFSET + dataLen];</span>
<span class="source-line-no">1430</span><span id="line-1430">    System.arraycopy(this.bytes, this.offset, newBuffer, 0,</span>
<span class="source-line-no">1431</span><span id="line-1431">      Math.min(newBuffer.length, this.length));</span>
<span class="source-line-no">1432</span><span id="line-1432">    Bytes.putInt(newBuffer, Bytes.SIZEOF_INT, dataLen);</span>
<span class="source-line-no">1433</span><span id="line-1433">    if (lenAsVal) {</span>
<span class="source-line-no">1434</span><span id="line-1434">      Bytes.putInt(newBuffer, newBuffer.length - dataLen, this.getValueLength());</span>
<span class="source-line-no">1435</span><span id="line-1435">    }</span>
<span class="source-line-no">1436</span><span id="line-1436">    return new KeyValue(newBuffer);</span>
<span class="source-line-no">1437</span><span id="line-1437">  }</span>
<span class="source-line-no">1438</span><span id="line-1438"></span>
<span class="source-line-no">1439</span><span id="line-1439">  /**</span>
<span class="source-line-no">1440</span><span id="line-1440">   * Find index of passed delimiter walking from start of buffer forwards.</span>
<span class="source-line-no">1441</span><span id="line-1441">   * @param b         the kv serialized byte[] to process</span>
<span class="source-line-no">1442</span><span id="line-1442">   * @param delimiter input delimeter to fetch index from start</span>
<span class="source-line-no">1443</span><span id="line-1443">   * @return Index of delimiter having started from start of &lt;code&gt;b&lt;/code&gt; moving rightward.</span>
<span class="source-line-no">1444</span><span id="line-1444">   */</span>
<span class="source-line-no">1445</span><span id="line-1445">  public static int getDelimiter(final byte[] b, int offset, final int length,</span>
<span class="source-line-no">1446</span><span id="line-1446">    final int delimiter) {</span>
<span class="source-line-no">1447</span><span id="line-1447">    if (b == null) {</span>
<span class="source-line-no">1448</span><span id="line-1448">      throw new IllegalArgumentException("Passed buffer is null");</span>
<span class="source-line-no">1449</span><span id="line-1449">    }</span>
<span class="source-line-no">1450</span><span id="line-1450">    int result = -1;</span>
<span class="source-line-no">1451</span><span id="line-1451">    for (int i = offset; i &lt; length + offset; i++) {</span>
<span class="source-line-no">1452</span><span id="line-1452">      if (b[i] == delimiter) {</span>
<span class="source-line-no">1453</span><span id="line-1453">        result = i;</span>
<span class="source-line-no">1454</span><span id="line-1454">        break;</span>
<span class="source-line-no">1455</span><span id="line-1455">      }</span>
<span class="source-line-no">1456</span><span id="line-1456">    }</span>
<span class="source-line-no">1457</span><span id="line-1457">    return result;</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">  /**</span>
<span class="source-line-no">1461</span><span id="line-1461">   * Find index of passed delimiter walking from end of buffer backwards.</span>
<span class="source-line-no">1462</span><span id="line-1462">   * @param b         the kv serialized byte[] to process</span>
<span class="source-line-no">1463</span><span id="line-1463">   * @param offset    the offset in the byte[]</span>
<span class="source-line-no">1464</span><span id="line-1464">   * @param length    the length in the byte[]</span>
<span class="source-line-no">1465</span><span id="line-1465">   * @param delimiter input delimeter to fetch index from end</span>
<span class="source-line-no">1466</span><span id="line-1466">   * @return Index of delimiter</span>
<span class="source-line-no">1467</span><span id="line-1467">   */</span>
<span class="source-line-no">1468</span><span id="line-1468">  public static int getDelimiterInReverse(final byte[] b, final int offset, final int length,</span>
<span class="source-line-no">1469</span><span id="line-1469">    final int delimiter) {</span>
<span class="source-line-no">1470</span><span id="line-1470">    if (b == null) {</span>
<span class="source-line-no">1471</span><span id="line-1471">      throw new IllegalArgumentException("Passed buffer is null");</span>
<span class="source-line-no">1472</span><span id="line-1472">    }</span>
<span class="source-line-no">1473</span><span id="line-1473">    int result = -1;</span>
<span class="source-line-no">1474</span><span id="line-1474">    for (int i = (offset + length) - 1; i &gt;= offset; i--) {</span>
<span class="source-line-no">1475</span><span id="line-1475">      if (b[i] == delimiter) {</span>
<span class="source-line-no">1476</span><span id="line-1476">        result = i;</span>
<span class="source-line-no">1477</span><span id="line-1477">        break;</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">    return result;</span>
<span class="source-line-no">1481</span><span id="line-1481">  }</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">   * Create a KeyValue reading from &lt;code&gt;in&lt;/code&gt;</span>
<span class="source-line-no">1485</span><span id="line-1485">   * @param in Where to read bytes from. Creates a byte array to hold the KeyValue backing bytes</span>
<span class="source-line-no">1486</span><span id="line-1486">   *           copied from the steam.</span>
<span class="source-line-no">1487</span><span id="line-1487">   * @return KeyValue created by deserializing from &lt;code&gt;in&lt;/code&gt; OR if we find a length of zero,</span>
<span class="source-line-no">1488</span><span id="line-1488">   *         we will return null which can be useful marking a stream as done.</span>
<span class="source-line-no">1489</span><span id="line-1489">   * @throws IOException if any IO error happen</span>
<span class="source-line-no">1490</span><span id="line-1490">   */</span>
<span class="source-line-no">1491</span><span id="line-1491">  public static KeyValue create(final DataInput in) throws IOException {</span>
<span class="source-line-no">1492</span><span id="line-1492">    return create(in.readInt(), in);</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">  /**</span>
<span class="source-line-no">1496</span><span id="line-1496">   * Create a KeyValue reading &lt;code&gt;length&lt;/code&gt; from &lt;code&gt;in&lt;/code&gt;</span>
<span class="source-line-no">1497</span><span id="line-1497">   * @param length length of the Key</span>
<span class="source-line-no">1498</span><span id="line-1498">   * @param in     Input to read from</span>
<span class="source-line-no">1499</span><span id="line-1499">   * @return Created KeyValue OR if we find a length of zero, we will return null which can be</span>
<span class="source-line-no">1500</span><span id="line-1500">   *         useful marking a stream as done.</span>
<span class="source-line-no">1501</span><span id="line-1501">   * @throws IOException if any IO error happen</span>
<span class="source-line-no">1502</span><span id="line-1502">   */</span>
<span class="source-line-no">1503</span><span id="line-1503">  public static KeyValue create(int length, final DataInput in) throws IOException {</span>
<span class="source-line-no">1504</span><span id="line-1504"></span>
<span class="source-line-no">1505</span><span id="line-1505">    if (length &lt;= 0) {</span>
<span class="source-line-no">1506</span><span id="line-1506">      if (length == 0) {</span>
<span class="source-line-no">1507</span><span id="line-1507">        return null;</span>
<span class="source-line-no">1508</span><span id="line-1508">      }</span>
<span class="source-line-no">1509</span><span id="line-1509">      throw new IOException("Failed read " + length + " bytes, stream corrupt?");</span>
<span class="source-line-no">1510</span><span id="line-1510">    }</span>
<span class="source-line-no">1511</span><span id="line-1511"></span>
<span class="source-line-no">1512</span><span id="line-1512">    // This is how the old Writables.readFrom used to deserialize. Didn't even vint.</span>
<span class="source-line-no">1513</span><span id="line-1513">    byte[] bytes = new byte[length];</span>
<span class="source-line-no">1514</span><span id="line-1514">    in.readFully(bytes);</span>
<span class="source-line-no">1515</span><span id="line-1515">    return new KeyValue(bytes, 0, length);</span>
<span class="source-line-no">1516</span><span id="line-1516">  }</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">   * Write out a KeyValue in the manner in which we used to when KeyValue was a Writable.</span>
<span class="source-line-no">1520</span><span id="line-1520">   * @param kv  the KeyValue on which write is being requested</span>
<span class="source-line-no">1521</span><span id="line-1521">   * @param out OutputStream to write keyValue to</span>
<span class="source-line-no">1522</span><span id="line-1522">   * @return Length written on stream</span>
<span class="source-line-no">1523</span><span id="line-1523">   * @throws IOException if any IO error happen</span>
<span class="source-line-no">1524</span><span id="line-1524">   * @see #create(DataInput) for the inverse function</span>
<span class="source-line-no">1525</span><span id="line-1525">   */</span>
<span class="source-line-no">1526</span><span id="line-1526">  public static long write(final KeyValue kv, final DataOutput out) throws IOException {</span>
<span class="source-line-no">1527</span><span id="line-1527">    // This is how the old Writables write used to serialize KVs. Need to figure way to make it</span>
<span class="source-line-no">1528</span><span id="line-1528">    // work for all implementations.</span>
<span class="source-line-no">1529</span><span id="line-1529">    int length = kv.getLength();</span>
<span class="source-line-no">1530</span><span id="line-1530">    out.writeInt(length);</span>
<span class="source-line-no">1531</span><span id="line-1531">    out.write(kv.getBuffer(), kv.getOffset(), length);</span>
<span class="source-line-no">1532</span><span id="line-1532">    return (long) length + Bytes.SIZEOF_INT;</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 int write(OutputStream out, boolean withTags) throws IOException {</span>
<span class="source-line-no">1537</span><span id="line-1537">    int len = getSerializedSize(withTags);</span>
<span class="source-line-no">1538</span><span id="line-1538">    out.write(this.bytes, this.offset, len);</span>
<span class="source-line-no">1539</span><span id="line-1539">    return len;</span>
<span class="source-line-no">1540</span><span id="line-1540">  }</span>
<span class="source-line-no">1541</span><span id="line-1541"></span>
<span class="source-line-no">1542</span><span id="line-1542">  @Override</span>
<span class="source-line-no">1543</span><span id="line-1543">  public int getSerializedSize(boolean withTags) {</span>
<span class="source-line-no">1544</span><span id="line-1544">    if (withTags) {</span>
<span class="source-line-no">1545</span><span id="line-1545">      return this.length;</span>
<span class="source-line-no">1546</span><span id="line-1546">    }</span>
<span class="source-line-no">1547</span><span id="line-1547">    return this.getKeyLength() + this.getValueLength() + KEYVALUE_INFRASTRUCTURE_SIZE;</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 int getSerializedSize() {</span>
<span class="source-line-no">1552</span><span id="line-1552">    return this.length;</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 void write(ByteBuffer buf, int offset) {</span>
<span class="source-line-no">1557</span><span id="line-1557">    ByteBufferUtils.copyFromArrayToBuffer(buf, offset, this.bytes, this.offset, this.length);</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">  /**</span>
<span class="source-line-no">1561</span><span id="line-1561">   * Avoids redundant comparisons for better performance. TODO get rid of this wart</span>
<span class="source-line-no">1562</span><span id="line-1562">   */</span>
<span class="source-line-no">1563</span><span id="line-1563">  public interface SamePrefixComparator&lt;T&gt; {</span>
<span class="source-line-no">1564</span><span id="line-1564">    /**</span>
<span class="source-line-no">1565</span><span id="line-1565">     * Compare two keys assuming that the first n bytes are the same.</span>
<span class="source-line-no">1566</span><span id="line-1566">     * @param commonPrefix How many bytes are the same.</span>
<span class="source-line-no">1567</span><span id="line-1567">     */</span>
<span class="source-line-no">1568</span><span id="line-1568">    int compareIgnoringPrefix(int commonPrefix, byte[] left, int loffset, int llength, byte[] right,</span>
<span class="source-line-no">1569</span><span id="line-1569">      int roffset, int rlength);</span>
<span class="source-line-no">1570</span><span id="line-1570">  }</span>
<span class="source-line-no">1571</span><span id="line-1571"></span>
<span class="source-line-no">1572</span><span id="line-1572">  /**</span>
<span class="source-line-no">1573</span><span id="line-1573">   * HeapSize implementation</span>
<span class="source-line-no">1574</span><span id="line-1574">   * &lt;p/&gt;</span>
<span class="source-line-no">1575</span><span id="line-1575">   * We do not count the bytes in the rowCache because it should be empty for a KeyValue in the</span>
<span class="source-line-no">1576</span><span id="line-1576">   * MemStore.</span>
<span class="source-line-no">1577</span><span id="line-1577">   */</span>
<span class="source-line-no">1578</span><span id="line-1578">  @Override</span>
<span class="source-line-no">1579</span><span id="line-1579">  public long heapSize() {</span>
<span class="source-line-no">1580</span><span id="line-1580">    // Deep object overhead for this KV consists of two parts. The first part is the KV object</span>
<span class="source-line-no">1581</span><span id="line-1581">    // itself, while the second part is the backing byte[]. We will only count the array overhead</span>
<span class="source-line-no">1582</span><span id="line-1582">    // from the byte[] only if this is the first KV in there.</span>
<span class="source-line-no">1583</span><span id="line-1583">    int fixed = ClassSize.align(FIXED_OVERHEAD);</span>
<span class="source-line-no">1584</span><span id="line-1584">    if (offset == 0) {</span>
<span class="source-line-no">1585</span><span id="line-1585">      // count both length and object overhead</span>
<span class="source-line-no">1586</span><span id="line-1586">      return fixed + ClassSize.sizeOfByteArray(length);</span>
<span class="source-line-no">1587</span><span id="line-1587">    } else {</span>
<span class="source-line-no">1588</span><span id="line-1588">      // only count the number of bytes</span>
<span class="source-line-no">1589</span><span id="line-1589">      return (long) fixed + length;</span>
<span class="source-line-no">1590</span><span id="line-1590">    }</span>
<span class="source-line-no">1591</span><span id="line-1591">  }</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">   * A simple form of KeyValue that creates a keyvalue with only the key part of the byte[] Mainly</span>
<span class="source-line-no">1595</span><span id="line-1595">   * used in places where we need to compare two cells. Avoids copying of bytes In places like block</span>
<span class="source-line-no">1596</span><span id="line-1596">   * index keys, we need to compare the key byte[] with a cell. Hence create a Keyvalue(aka Cell)</span>
<span class="source-line-no">1597</span><span id="line-1597">   * that would help in comparing as two cells</span>
<span class="source-line-no">1598</span><span id="line-1598">   */</span>
<span class="source-line-no">1599</span><span id="line-1599">  public static class KeyOnlyKeyValue extends KeyValue {</span>
<span class="source-line-no">1600</span><span id="line-1600">    private short rowLen = -1;</span>
<span class="source-line-no">1601</span><span id="line-1601"></span>
<span class="source-line-no">1602</span><span id="line-1602">    public KeyOnlyKeyValue() {</span>
<span class="source-line-no">1603</span><span id="line-1603"></span>
<span class="source-line-no">1604</span><span id="line-1604">    }</span>
<span class="source-line-no">1605</span><span id="line-1605"></span>
<span class="source-line-no">1606</span><span id="line-1606">    public KeyOnlyKeyValue(byte[] b) {</span>
<span class="source-line-no">1607</span><span id="line-1607">      this(b, 0, b.length);</span>
<span class="source-line-no">1608</span><span id="line-1608">    }</span>
<span class="source-line-no">1609</span><span id="line-1609"></span>
<span class="source-line-no">1610</span><span id="line-1610">    public KeyOnlyKeyValue(byte[] b, int offset, int length) {</span>
<span class="source-line-no">1611</span><span id="line-1611">      this.bytes = b;</span>
<span class="source-line-no">1612</span><span id="line-1612">      this.length = length;</span>
<span class="source-line-no">1613</span><span id="line-1613">      this.offset = offset;</span>
<span class="source-line-no">1614</span><span id="line-1614">      this.rowLen = Bytes.toShort(this.bytes, this.offset);</span>
<span class="source-line-no">1615</span><span id="line-1615">    }</span>
<span class="source-line-no">1616</span><span id="line-1616"></span>
<span class="source-line-no">1617</span><span id="line-1617">    public void set(KeyOnlyKeyValue keyOnlyKeyValue) {</span>
<span class="source-line-no">1618</span><span id="line-1618">      this.bytes = keyOnlyKeyValue.bytes;</span>
<span class="source-line-no">1619</span><span id="line-1619">      this.length = keyOnlyKeyValue.length;</span>
<span class="source-line-no">1620</span><span id="line-1620">      this.offset = keyOnlyKeyValue.offset;</span>
<span class="source-line-no">1621</span><span id="line-1621">      this.rowLen = keyOnlyKeyValue.rowLen;</span>
<span class="source-line-no">1622</span><span id="line-1622">    }</span>
<span class="source-line-no">1623</span><span id="line-1623"></span>
<span class="source-line-no">1624</span><span id="line-1624">    public void clear() {</span>
<span class="source-line-no">1625</span><span id="line-1625">      rowLen = -1;</span>
<span class="source-line-no">1626</span><span id="line-1626">      bytes = null;</span>
<span class="source-line-no">1627</span><span id="line-1627">      offset = 0;</span>
<span class="source-line-no">1628</span><span id="line-1628">      length = 0;</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 getKeyOffset() {</span>
<span class="source-line-no">1633</span><span id="line-1633">      return this.offset;</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">    /**</span>
<span class="source-line-no">1637</span><span id="line-1637">     * A setter that helps to avoid object creation every time and whenever there is a need to</span>
<span class="source-line-no">1638</span><span id="line-1638">     * create new KeyOnlyKeyValue.</span>
<span class="source-line-no">1639</span><span id="line-1639">     * @param key    Key to set</span>
<span class="source-line-no">1640</span><span id="line-1640">     * @param offset Offset of the Key</span>
<span class="source-line-no">1641</span><span id="line-1641">     * @param length length of the Key</span>
<span class="source-line-no">1642</span><span id="line-1642">     */</span>
<span class="source-line-no">1643</span><span id="line-1643">    public void setKey(byte[] key, int offset, int length) {</span>
<span class="source-line-no">1644</span><span id="line-1644">      this.bytes = key;</span>
<span class="source-line-no">1645</span><span id="line-1645">      this.offset = offset;</span>
<span class="source-line-no">1646</span><span id="line-1646">      this.length = length;</span>
<span class="source-line-no">1647</span><span id="line-1647">      this.rowLen = Bytes.toShort(this.bytes, this.offset);</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 byte[] getKey() {</span>
<span class="source-line-no">1652</span><span id="line-1652">      int keylength = getKeyLength();</span>
<span class="source-line-no">1653</span><span id="line-1653">      byte[] key = new byte[keylength];</span>
<span class="source-line-no">1654</span><span id="line-1654">      System.arraycopy(this.bytes, getKeyOffset(), key, 0, keylength);</span>
<span class="source-line-no">1655</span><span id="line-1655">      return key;</span>
<span class="source-line-no">1656</span><span id="line-1656">    }</span>
<span class="source-line-no">1657</span><span id="line-1657"></span>
<span class="source-line-no">1658</span><span id="line-1658">    @Override</span>
<span class="source-line-no">1659</span><span id="line-1659">    public byte[] getRowArray() {</span>
<span class="source-line-no">1660</span><span id="line-1660">      return bytes;</span>
<span class="source-line-no">1661</span><span id="line-1661">    }</span>
<span class="source-line-no">1662</span><span id="line-1662"></span>
<span class="source-line-no">1663</span><span id="line-1663">    @Override</span>
<span class="source-line-no">1664</span><span id="line-1664">    public int getRowOffset() {</span>
<span class="source-line-no">1665</span><span id="line-1665">      return getKeyOffset() + Bytes.SIZEOF_SHORT;</span>
<span class="source-line-no">1666</span><span id="line-1666">    }</span>
<span class="source-line-no">1667</span><span id="line-1667"></span>
<span class="source-line-no">1668</span><span id="line-1668">    @Override</span>
<span class="source-line-no">1669</span><span id="line-1669">    public byte[] getFamilyArray() {</span>
<span class="source-line-no">1670</span><span id="line-1670">      return bytes;</span>
<span class="source-line-no">1671</span><span id="line-1671">    }</span>
<span class="source-line-no">1672</span><span id="line-1672"></span>
<span class="source-line-no">1673</span><span id="line-1673">    @Override</span>
<span class="source-line-no">1674</span><span id="line-1674">    public byte getFamilyLength() {</span>
<span class="source-line-no">1675</span><span id="line-1675">      return this.bytes[getFamilyOffset() - 1];</span>
<span class="source-line-no">1676</span><span id="line-1676">    }</span>
<span class="source-line-no">1677</span><span id="line-1677"></span>
<span class="source-line-no">1678</span><span id="line-1678">    @Override</span>
<span class="source-line-no">1679</span><span id="line-1679">    int getFamilyLengthPosition(int rowLength) {</span>
<span class="source-line-no">1680</span><span id="line-1680">      return this.offset + Bytes.SIZEOF_SHORT + rowLength;</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 int getFamilyOffset() {</span>
<span class="source-line-no">1685</span><span id="line-1685">      return this.offset + Bytes.SIZEOF_SHORT + getRowLength() + Bytes.SIZEOF_BYTE;</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 byte[] getQualifierArray() {</span>
<span class="source-line-no">1690</span><span id="line-1690">      return bytes;</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 int getQualifierLength() {</span>
<span class="source-line-no">1695</span><span id="line-1695">      return getQualifierLength(getRowLength(), getFamilyLength());</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 int getQualifierOffset() {</span>
<span class="source-line-no">1700</span><span id="line-1700">      return getFamilyOffset() + getFamilyLength();</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 int getKeyLength() {</span>
<span class="source-line-no">1705</span><span id="line-1705">      return length;</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 short getRowLength() {</span>
<span class="source-line-no">1710</span><span id="line-1710">      return rowLen;</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">    @Override</span>
<span class="source-line-no">1714</span><span id="line-1714">    public byte getTypeByte() {</span>
<span class="source-line-no">1715</span><span id="line-1715">      return getTypeByte(getKeyLength());</span>
<span class="source-line-no">1716</span><span id="line-1716">    }</span>
<span class="source-line-no">1717</span><span id="line-1717"></span>
<span class="source-line-no">1718</span><span id="line-1718">    @Override</span>
<span class="source-line-no">1719</span><span id="line-1719">    byte getTypeByte(int keyLength) {</span>
<span class="source-line-no">1720</span><span id="line-1720">      return this.bytes[this.offset + keyLength - 1];</span>
<span class="source-line-no">1721</span><span id="line-1721">    }</span>
<span class="source-line-no">1722</span><span id="line-1722"></span>
<span class="source-line-no">1723</span><span id="line-1723">    private int getQualifierLength(int rlength, int flength) {</span>
<span class="source-line-no">1724</span><span id="line-1724">      return getKeyLength() - (int) getKeyDataStructureSize(rlength, flength, 0);</span>
<span class="source-line-no">1725</span><span id="line-1725">    }</span>
<span class="source-line-no">1726</span><span id="line-1726"></span>
<span class="source-line-no">1727</span><span id="line-1727">    @Override</span>
<span class="source-line-no">1728</span><span id="line-1728">    public long getTimestamp() {</span>
<span class="source-line-no">1729</span><span id="line-1729">      int tsOffset = getTimestampOffset();</span>
<span class="source-line-no">1730</span><span id="line-1730">      return Bytes.toLong(this.bytes, tsOffset);</span>
<span class="source-line-no">1731</span><span id="line-1731">    }</span>
<span class="source-line-no">1732</span><span id="line-1732"></span>
<span class="source-line-no">1733</span><span id="line-1733">    @Override</span>
<span class="source-line-no">1734</span><span id="line-1734">    public int getTimestampOffset() {</span>
<span class="source-line-no">1735</span><span id="line-1735">      return getKeyOffset() + getKeyLength() - TIMESTAMP_TYPE_SIZE;</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 byte[] getTagsArray() {</span>
<span class="source-line-no">1740</span><span id="line-1740">      return HConstants.EMPTY_BYTE_ARRAY;</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 getTagsOffset() {</span>
<span class="source-line-no">1745</span><span id="line-1745">      return 0;</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 byte[] getValueArray() {</span>
<span class="source-line-no">1750</span><span id="line-1750">      throw new IllegalArgumentException("KeyOnlyKeyValue does not work with values.");</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 int getValueOffset() {</span>
<span class="source-line-no">1755</span><span id="line-1755">      throw new IllegalArgumentException("KeyOnlyKeyValue does not work with values.");</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 int getValueLength() {</span>
<span class="source-line-no">1760</span><span id="line-1760">      throw new IllegalArgumentException("KeyOnlyKeyValue does not work with values.");</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 int getTagsLength() {</span>
<span class="source-line-no">1765</span><span id="line-1765">      return 0;</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">    @Override</span>
<span class="source-line-no">1769</span><span id="line-1769">    public String toString() {</span>
<span class="source-line-no">1770</span><span id="line-1770">      if (this.bytes == null || this.bytes.length == 0) {</span>
<span class="source-line-no">1771</span><span id="line-1771">        return "empty";</span>
<span class="source-line-no">1772</span><span id="line-1772">      }</span>
<span class="source-line-no">1773</span><span id="line-1773">      return keyToString(this.bytes, this.offset, getKeyLength()) + "/vlen=0/mvcc=0";</span>
<span class="source-line-no">1774</span><span id="line-1774">    }</span>
<span class="source-line-no">1775</span><span id="line-1775"></span>
<span class="source-line-no">1776</span><span id="line-1776">    @Override</span>
<span class="source-line-no">1777</span><span id="line-1777">    public int hashCode() {</span>
<span class="source-line-no">1778</span><span id="line-1778">      return super.hashCode();</span>
<span class="source-line-no">1779</span><span id="line-1779">    }</span>
<span class="source-line-no">1780</span><span id="line-1780"></span>
<span class="source-line-no">1781</span><span id="line-1781">    @Override</span>
<span class="source-line-no">1782</span><span id="line-1782">    public boolean equals(Object other) {</span>
<span class="source-line-no">1783</span><span id="line-1783">      return super.equals(other);</span>
<span class="source-line-no">1784</span><span id="line-1784">    }</span>
<span class="source-line-no">1785</span><span id="line-1785"></span>
<span class="source-line-no">1786</span><span id="line-1786">    @Override</span>
<span class="source-line-no">1787</span><span id="line-1787">    public long heapSize() {</span>
<span class="source-line-no">1788</span><span id="line-1788">      return super.heapSize() + Bytes.SIZEOF_SHORT;</span>
<span class="source-line-no">1789</span><span id="line-1789">    }</span>
<span class="source-line-no">1790</span><span id="line-1790"></span>
<span class="source-line-no">1791</span><span id="line-1791">    @Override</span>
<span class="source-line-no">1792</span><span id="line-1792">    public int write(OutputStream out, boolean withTags) throws IOException {</span>
<span class="source-line-no">1793</span><span id="line-1793">      // This type of Cell is used only to maintain some internal states. We never allow this type</span>
<span class="source-line-no">1794</span><span id="line-1794">      // of Cell to be returned back over the RPC</span>
<span class="source-line-no">1795</span><span id="line-1795">      throw new IllegalStateException("A reader should never return this type of a Cell");</span>
<span class="source-line-no">1796</span><span id="line-1796">    }</span>
<span class="source-line-no">1797</span><span id="line-1797">  }</span>
<span class="source-line-no">1798</span><span id="line-1798"></span>
<span class="source-line-no">1799</span><span id="line-1799">  @Override</span>
<span class="source-line-no">1800</span><span id="line-1800">  public ExtendedCell deepClone() {</span>
<span class="source-line-no">1801</span><span id="line-1801">    byte[] copy = Bytes.copy(this.bytes, this.offset, this.length);</span>
<span class="source-line-no">1802</span><span id="line-1802">    KeyValue kv = new KeyValue(copy, 0, copy.length);</span>
<span class="source-line-no">1803</span><span id="line-1803">    kv.setSequenceId(this.getSequenceId());</span>
<span class="source-line-no">1804</span><span id="line-1804">    return kv;</span>
<span class="source-line-no">1805</span><span id="line-1805">  }</span>
<span class="source-line-no">1806</span><span id="line-1806">}</span>




























































</pre>
</div>
</main>
</body>
</html>
