<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
</head>
<body>
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
<span class="sourceLineNo">002</span> * Copyright The Apache Software Foundation<a name="line.2"></a>
<span class="sourceLineNo">003</span> *<a name="line.3"></a>
<span class="sourceLineNo">004</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.4"></a>
<span class="sourceLineNo">005</span> * or more contributor license agreements.  See the NOTICE file<a name="line.5"></a>
<span class="sourceLineNo">006</span> * distributed with this work for additional information<a name="line.6"></a>
<span class="sourceLineNo">007</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.7"></a>
<span class="sourceLineNo">008</span> * to you under the Apache License, Version 2.0 (the<a name="line.8"></a>
<span class="sourceLineNo">009</span> * "License"); you may not use this file except in compliance<a name="line.9"></a>
<span class="sourceLineNo">010</span> * with the License.  You may obtain a copy of the License at<a name="line.10"></a>
<span class="sourceLineNo">011</span> *<a name="line.11"></a>
<span class="sourceLineNo">012</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.12"></a>
<span class="sourceLineNo">013</span> *<a name="line.13"></a>
<span class="sourceLineNo">014</span> * Unless required by applicable law or agreed to in writing, software<a name="line.14"></a>
<span class="sourceLineNo">015</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.15"></a>
<span class="sourceLineNo">016</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.16"></a>
<span class="sourceLineNo">017</span> * See the License for the specific language governing permissions and<a name="line.17"></a>
<span class="sourceLineNo">018</span> * limitations under the License.<a name="line.18"></a>
<span class="sourceLineNo">019</span> */<a name="line.19"></a>
<span class="sourceLineNo">020</span>package org.apache.hadoop.hbase;<a name="line.20"></a>
<span class="sourceLineNo">021</span><a name="line.21"></a>
<span class="sourceLineNo">022</span>import static org.apache.hadoop.hbase.util.Bytes.len;<a name="line.22"></a>
<span class="sourceLineNo">023</span><a name="line.23"></a>
<span class="sourceLineNo">024</span>import java.io.DataInput;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import java.io.DataOutput;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import java.io.IOException;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import java.io.OutputStream;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import java.nio.ByteBuffer;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import java.util.ArrayList;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import java.util.Arrays;<a name="line.30"></a>
<span class="sourceLineNo">031</span>import java.util.HashMap;<a name="line.31"></a>
<span class="sourceLineNo">032</span>import java.util.Iterator;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import java.util.List;<a name="line.33"></a>
<span class="sourceLineNo">034</span>import java.util.Map;<a name="line.34"></a>
<span class="sourceLineNo">035</span><a name="line.35"></a>
<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.util.ByteBufferUtils;<a name="line.36"></a>
<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.37"></a>
<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.util.ClassSize;<a name="line.38"></a>
<span class="sourceLineNo">039</span>import org.apache.hadoop.io.RawComparator;<a name="line.39"></a>
<span class="sourceLineNo">040</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.40"></a>
<span class="sourceLineNo">041</span>import org.slf4j.Logger;<a name="line.41"></a>
<span class="sourceLineNo">042</span>import org.slf4j.LoggerFactory;<a name="line.42"></a>
<span class="sourceLineNo">043</span><a name="line.43"></a>
<span class="sourceLineNo">044</span>/**<a name="line.44"></a>
<span class="sourceLineNo">045</span> * An HBase Key/Value. This is the fundamental HBase Type.<a name="line.45"></a>
<span class="sourceLineNo">046</span> * &lt;p&gt;<a name="line.46"></a>
<span class="sourceLineNo">047</span> * HBase applications and users should use the Cell interface and avoid directly using KeyValue and<a name="line.47"></a>
<span class="sourceLineNo">048</span> * member functions not defined in Cell.<a name="line.48"></a>
<span class="sourceLineNo">049</span> * &lt;p&gt;<a name="line.49"></a>
<span class="sourceLineNo">050</span> * If being used client-side, the primary methods to access individual fields are<a name="line.50"></a>
<span class="sourceLineNo">051</span> * {@link #getRowArray()}, {@link #getFamilyArray()}, {@link #getQualifierArray()},<a name="line.51"></a>
<span class="sourceLineNo">052</span> * {@link #getTimestamp()}, and {@link #getValueArray()}. These methods allocate new byte arrays<a name="line.52"></a>
<span class="sourceLineNo">053</span> * and return copies. Avoid their use server-side.<a name="line.53"></a>
<span class="sourceLineNo">054</span> * &lt;p&gt;<a name="line.54"></a>
<span class="sourceLineNo">055</span> * Instances of this class are immutable. They do not implement Comparable but Comparators are<a name="line.55"></a>
<span class="sourceLineNo">056</span> * provided. Comparators change with context, whether user table or a catalog table comparison. Its<a name="line.56"></a>
<span class="sourceLineNo">057</span> * critical you use the appropriate comparator. There are Comparators for normal HFiles, Meta's<a name="line.57"></a>
<span class="sourceLineNo">058</span> * Hfiles, and bloom filter keys.<a name="line.58"></a>
<span class="sourceLineNo">059</span> * &lt;p&gt;<a name="line.59"></a>
<span class="sourceLineNo">060</span> * KeyValue wraps a byte array and takes offsets and lengths into passed array at where to start<a name="line.60"></a>
<span class="sourceLineNo">061</span> * interpreting the content as KeyValue. The KeyValue format inside a byte array is:<a name="line.61"></a>
<span class="sourceLineNo">062</span> * &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<a name="line.62"></a>
<span class="sourceLineNo">063</span> * decomposed as: &lt;code&gt;&amp;lt;rowlength&amp;gt; &amp;lt;row&amp;gt; &amp;lt;columnfamilylength&amp;gt;<a name="line.63"></a>
<span class="sourceLineNo">064</span> * &amp;lt;columnfamily&amp;gt; &amp;lt;columnqualifier&amp;gt;<a name="line.64"></a>
<span class="sourceLineNo">065</span> * &amp;lt;timestamp&amp;gt; &amp;lt;keytype&amp;gt;&lt;/code&gt; The &lt;code&gt;rowlength&lt;/code&gt; maximum is<a name="line.65"></a>
<span class="sourceLineNo">066</span> * &lt;code&gt;Short.MAX_SIZE&lt;/code&gt;, column family length maximum is &lt;code&gt;Byte.MAX_SIZE&lt;/code&gt;, and<a name="line.66"></a>
<span class="sourceLineNo">067</span> * column qualifier + key length must be &amp;lt; &lt;code&gt;Integer.MAX_SIZE&lt;/code&gt;. The column does not<a name="line.67"></a>
<span class="sourceLineNo">068</span> * contain the family/qualifier delimiter, {@link #COLUMN_FAMILY_DELIMITER}&lt;br&gt;<a name="line.68"></a>
<span class="sourceLineNo">069</span> * KeyValue can optionally contain Tags. When it contains tags, it is added in the byte array after<a name="line.69"></a>
<span class="sourceLineNo">070</span> * 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;.<a name="line.70"></a>
<span class="sourceLineNo">071</span> * &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;<a name="line.71"></a>
<span class="sourceLineNo">072</span> * contain one or more tags where as each tag is of the form<a name="line.72"></a>
<span class="sourceLineNo">073</span> * &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<a name="line.73"></a>
<span class="sourceLineNo">074</span> * 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<a name="line.74"></a>
<span class="sourceLineNo">075</span> * length and actual tag bytes length.<a name="line.75"></a>
<span class="sourceLineNo">076</span> */<a name="line.76"></a>
<span class="sourceLineNo">077</span>@InterfaceAudience.Private<a name="line.77"></a>
<span class="sourceLineNo">078</span>public class KeyValue implements ExtendedCell, Cloneable {<a name="line.78"></a>
<span class="sourceLineNo">079</span>  private static final ArrayList&lt;Tag&gt; EMPTY_ARRAY_LIST = new ArrayList&lt;&gt;();<a name="line.79"></a>
<span class="sourceLineNo">080</span><a name="line.80"></a>
<span class="sourceLineNo">081</span>  private static final Logger LOG = LoggerFactory.getLogger(KeyValue.class);<a name="line.81"></a>
<span class="sourceLineNo">082</span><a name="line.82"></a>
<span class="sourceLineNo">083</span>  public static final int FIXED_OVERHEAD = ClassSize.OBJECT + // the KeyValue object itself<a name="line.83"></a>
<span class="sourceLineNo">084</span>      ClassSize.REFERENCE + // pointer to "bytes"<a name="line.84"></a>
<span class="sourceLineNo">085</span>      2 * Bytes.SIZEOF_INT + // offset, length<a name="line.85"></a>
<span class="sourceLineNo">086</span>      Bytes.SIZEOF_LONG;// memstoreTS<a name="line.86"></a>
<span class="sourceLineNo">087</span><a name="line.87"></a>
<span class="sourceLineNo">088</span>  /**<a name="line.88"></a>
<span class="sourceLineNo">089</span>   * Colon character in UTF-8<a name="line.89"></a>
<span class="sourceLineNo">090</span>   */<a name="line.90"></a>
<span class="sourceLineNo">091</span>  public static final char COLUMN_FAMILY_DELIMITER = ':';<a name="line.91"></a>
<span class="sourceLineNo">092</span><a name="line.92"></a>
<span class="sourceLineNo">093</span>  public static final byte[] COLUMN_FAMILY_DELIM_ARRAY =<a name="line.93"></a>
<span class="sourceLineNo">094</span>    new byte[]{COLUMN_FAMILY_DELIMITER};<a name="line.94"></a>
<span class="sourceLineNo">095</span><a name="line.95"></a>
<span class="sourceLineNo">096</span>  /**<a name="line.96"></a>
<span class="sourceLineNo">097</span>   * Comparator for plain key/values; i.e. non-catalog table key/values. Works on Key portion<a name="line.97"></a>
<span class="sourceLineNo">098</span>   * of KeyValue only.<a name="line.98"></a>
<span class="sourceLineNo">099</span>   * @deprecated Use {@link CellComparator#getInstance()} instead. Deprecated for hbase 2.0, remove for hbase 3.0.<a name="line.99"></a>
<span class="sourceLineNo">100</span>   */<a name="line.100"></a>
<span class="sourceLineNo">101</span>  @Deprecated<a name="line.101"></a>
<span class="sourceLineNo">102</span>  public static final KVComparator COMPARATOR = new KVComparator();<a name="line.102"></a>
<span class="sourceLineNo">103</span>  /**<a name="line.103"></a>
<span class="sourceLineNo">104</span>   * A {@link KVComparator} for &lt;code&gt;hbase:meta&lt;/code&gt; catalog table<a name="line.104"></a>
<span class="sourceLineNo">105</span>   * {@link KeyValue}s.<a name="line.105"></a>
<span class="sourceLineNo">106</span>   * @deprecated Use {@link MetaCellComparator#META_COMPARATOR} instead.<a name="line.106"></a>
<span class="sourceLineNo">107</span>   *   Deprecated for hbase 2.0, remove for hbase 3.0.<a name="line.107"></a>
<span class="sourceLineNo">108</span>   */<a name="line.108"></a>
<span class="sourceLineNo">109</span>  @Deprecated<a name="line.109"></a>
<span class="sourceLineNo">110</span>  public static final KVComparator META_COMPARATOR = new MetaComparator();<a name="line.110"></a>
<span class="sourceLineNo">111</span><a name="line.111"></a>
<span class="sourceLineNo">112</span>  /** Size of the key length field in bytes*/<a name="line.112"></a>
<span class="sourceLineNo">113</span>  public static final int KEY_LENGTH_SIZE = Bytes.SIZEOF_INT;<a name="line.113"></a>
<span class="sourceLineNo">114</span><a name="line.114"></a>
<span class="sourceLineNo">115</span>  /** Size of the key type field in bytes */<a name="line.115"></a>
<span class="sourceLineNo">116</span>  public static final int TYPE_SIZE = Bytes.SIZEOF_BYTE;<a name="line.116"></a>
<span class="sourceLineNo">117</span><a name="line.117"></a>
<span class="sourceLineNo">118</span>  /** Size of the row length field in bytes */<a name="line.118"></a>
<span class="sourceLineNo">119</span>  public static final int ROW_LENGTH_SIZE = Bytes.SIZEOF_SHORT;<a name="line.119"></a>
<span class="sourceLineNo">120</span><a name="line.120"></a>
<span class="sourceLineNo">121</span>  /** Size of the family length field in bytes */<a name="line.121"></a>
<span class="sourceLineNo">122</span>  public static final int FAMILY_LENGTH_SIZE = Bytes.SIZEOF_BYTE;<a name="line.122"></a>
<span class="sourceLineNo">123</span><a name="line.123"></a>
<span class="sourceLineNo">124</span>  /** Size of the timestamp field in bytes */<a name="line.124"></a>
<span class="sourceLineNo">125</span>  public static final int TIMESTAMP_SIZE = Bytes.SIZEOF_LONG;<a name="line.125"></a>
<span class="sourceLineNo">126</span><a name="line.126"></a>
<span class="sourceLineNo">127</span>  // Size of the timestamp and type byte on end of a key -- a long + a byte.<a name="line.127"></a>
<span class="sourceLineNo">128</span>  public static final int TIMESTAMP_TYPE_SIZE = TIMESTAMP_SIZE + TYPE_SIZE;<a name="line.128"></a>
<span class="sourceLineNo">129</span><a name="line.129"></a>
<span class="sourceLineNo">130</span>  // Size of the length shorts and bytes in key.<a name="line.130"></a>
<span class="sourceLineNo">131</span>  public static final int KEY_INFRASTRUCTURE_SIZE = ROW_LENGTH_SIZE<a name="line.131"></a>
<span class="sourceLineNo">132</span>      + FAMILY_LENGTH_SIZE + TIMESTAMP_TYPE_SIZE;<a name="line.132"></a>
<span class="sourceLineNo">133</span><a name="line.133"></a>
<span class="sourceLineNo">134</span>  // How far into the key the row starts at. First thing to read is the short<a name="line.134"></a>
<span class="sourceLineNo">135</span>  // that says how long the row is.<a name="line.135"></a>
<span class="sourceLineNo">136</span>  public static final int ROW_OFFSET =<a name="line.136"></a>
<span class="sourceLineNo">137</span>    Bytes.SIZEOF_INT /*keylength*/ +<a name="line.137"></a>
<span class="sourceLineNo">138</span>    Bytes.SIZEOF_INT /*valuelength*/;<a name="line.138"></a>
<span class="sourceLineNo">139</span><a name="line.139"></a>
<span class="sourceLineNo">140</span>  public static final int ROW_KEY_OFFSET = ROW_OFFSET + ROW_LENGTH_SIZE;<a name="line.140"></a>
<span class="sourceLineNo">141</span><a name="line.141"></a>
<span class="sourceLineNo">142</span>  // Size of the length ints in a KeyValue datastructure.<a name="line.142"></a>
<span class="sourceLineNo">143</span>  public static final int KEYVALUE_INFRASTRUCTURE_SIZE = ROW_OFFSET;<a name="line.143"></a>
<span class="sourceLineNo">144</span><a name="line.144"></a>
<span class="sourceLineNo">145</span>  /** Size of the tags length field in bytes */<a name="line.145"></a>
<span class="sourceLineNo">146</span>  public static final int TAGS_LENGTH_SIZE = Bytes.SIZEOF_SHORT;<a name="line.146"></a>
<span class="sourceLineNo">147</span><a name="line.147"></a>
<span class="sourceLineNo">148</span>  public static final int KEYVALUE_WITH_TAGS_INFRASTRUCTURE_SIZE = ROW_OFFSET + TAGS_LENGTH_SIZE;<a name="line.148"></a>
<span class="sourceLineNo">149</span><a name="line.149"></a>
<span class="sourceLineNo">150</span>  /**<a name="line.150"></a>
<span class="sourceLineNo">151</span>   * Computes the number of bytes that a &lt;code&gt;KeyValue&lt;/code&gt; instance with the provided<a name="line.151"></a>
<span class="sourceLineNo">152</span>   * characteristics would take up for its underlying data structure.<a name="line.152"></a>
<span class="sourceLineNo">153</span>   *<a name="line.153"></a>
<span class="sourceLineNo">154</span>   * @param rlength row length<a name="line.154"></a>
<span class="sourceLineNo">155</span>   * @param flength family length<a name="line.155"></a>
<span class="sourceLineNo">156</span>   * @param qlength qualifier length<a name="line.156"></a>
<span class="sourceLineNo">157</span>   * @param vlength value length<a name="line.157"></a>
<span class="sourceLineNo">158</span>   *<a name="line.158"></a>
<span class="sourceLineNo">159</span>   * @return the &lt;code&gt;KeyValue&lt;/code&gt; data structure length<a name="line.159"></a>
<span class="sourceLineNo">160</span>   */<a name="line.160"></a>
<span class="sourceLineNo">161</span>  public static long getKeyValueDataStructureSize(int rlength,<a name="line.161"></a>
<span class="sourceLineNo">162</span>      int flength, int qlength, int vlength) {<a name="line.162"></a>
<span class="sourceLineNo">163</span>    return KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE<a name="line.163"></a>
<span class="sourceLineNo">164</span>        + getKeyDataStructureSize(rlength, flength, qlength) + vlength;<a name="line.164"></a>
<span class="sourceLineNo">165</span>  }<a name="line.165"></a>
<span class="sourceLineNo">166</span><a name="line.166"></a>
<span class="sourceLineNo">167</span>  /**<a name="line.167"></a>
<span class="sourceLineNo">168</span>   * Computes the number of bytes that a &lt;code&gt;KeyValue&lt;/code&gt; instance with the provided<a name="line.168"></a>
<span class="sourceLineNo">169</span>   * characteristics would take up for its underlying data structure.<a name="line.169"></a>
<span class="sourceLineNo">170</span>   *<a name="line.170"></a>
<span class="sourceLineNo">171</span>   * @param rlength row length<a name="line.171"></a>
<span class="sourceLineNo">172</span>   * @param flength family length<a name="line.172"></a>
<span class="sourceLineNo">173</span>   * @param qlength qualifier length<a name="line.173"></a>
<span class="sourceLineNo">174</span>   * @param vlength value length<a name="line.174"></a>
<span class="sourceLineNo">175</span>   * @param tagsLength total length of the tags<a name="line.175"></a>
<span class="sourceLineNo">176</span>   *<a name="line.176"></a>
<span class="sourceLineNo">177</span>   * @return the &lt;code&gt;KeyValue&lt;/code&gt; data structure length<a name="line.177"></a>
<span class="sourceLineNo">178</span>   */<a name="line.178"></a>
<span class="sourceLineNo">179</span>  public static long getKeyValueDataStructureSize(int rlength, int flength, int qlength,<a name="line.179"></a>
<span class="sourceLineNo">180</span>      int vlength, int tagsLength) {<a name="line.180"></a>
<span class="sourceLineNo">181</span>    if (tagsLength == 0) {<a name="line.181"></a>
<span class="sourceLineNo">182</span>      return getKeyValueDataStructureSize(rlength, flength, qlength, vlength);<a name="line.182"></a>
<span class="sourceLineNo">183</span>    }<a name="line.183"></a>
<span class="sourceLineNo">184</span>    return KeyValue.KEYVALUE_WITH_TAGS_INFRASTRUCTURE_SIZE<a name="line.184"></a>
<span class="sourceLineNo">185</span>        + getKeyDataStructureSize(rlength, flength, qlength) + vlength + tagsLength;<a name="line.185"></a>
<span class="sourceLineNo">186</span>  }<a name="line.186"></a>
<span class="sourceLineNo">187</span><a name="line.187"></a>
<span class="sourceLineNo">188</span>  /**<a name="line.188"></a>
<span class="sourceLineNo">189</span>   * Computes the number of bytes that a &lt;code&gt;KeyValue&lt;/code&gt; instance with the provided<a name="line.189"></a>
<span class="sourceLineNo">190</span>   * characteristics would take up for its underlying data structure.<a name="line.190"></a>
<span class="sourceLineNo">191</span>   *<a name="line.191"></a>
<span class="sourceLineNo">192</span>   * @param klength key length<a name="line.192"></a>
<span class="sourceLineNo">193</span>   * @param vlength value length<a name="line.193"></a>
<span class="sourceLineNo">194</span>   * @param tagsLength total length of the tags<a name="line.194"></a>
<span class="sourceLineNo">195</span>   *<a name="line.195"></a>
<span class="sourceLineNo">196</span>   * @return the &lt;code&gt;KeyValue&lt;/code&gt; data structure length<a name="line.196"></a>
<span class="sourceLineNo">197</span>   */<a name="line.197"></a>
<span class="sourceLineNo">198</span>  public static long getKeyValueDataStructureSize(int klength, int vlength, int tagsLength) {<a name="line.198"></a>
<span class="sourceLineNo">199</span>    if (tagsLength == 0) {<a name="line.199"></a>
<span class="sourceLineNo">200</span>      return (long) KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE + klength + vlength;<a name="line.200"></a>
<span class="sourceLineNo">201</span>    }<a name="line.201"></a>
<span class="sourceLineNo">202</span>    return (long) KeyValue.KEYVALUE_WITH_TAGS_INFRASTRUCTURE_SIZE + klength + vlength + tagsLength;<a name="line.202"></a>
<span class="sourceLineNo">203</span>  }<a name="line.203"></a>
<span class="sourceLineNo">204</span><a name="line.204"></a>
<span class="sourceLineNo">205</span>  /**<a name="line.205"></a>
<span class="sourceLineNo">206</span>   * Computes the number of bytes that a &lt;code&gt;KeyValue&lt;/code&gt; instance with the provided<a name="line.206"></a>
<span class="sourceLineNo">207</span>   * characteristics would take up in its underlying data structure for the key.<a name="line.207"></a>
<span class="sourceLineNo">208</span>   *<a name="line.208"></a>
<span class="sourceLineNo">209</span>   * @param rlength row length<a name="line.209"></a>
<span class="sourceLineNo">210</span>   * @param flength family length<a name="line.210"></a>
<span class="sourceLineNo">211</span>   * @param qlength qualifier length<a name="line.211"></a>
<span class="sourceLineNo">212</span>   *<a name="line.212"></a>
<span class="sourceLineNo">213</span>   * @return the key data structure length<a name="line.213"></a>
<span class="sourceLineNo">214</span>   */<a name="line.214"></a>
<span class="sourceLineNo">215</span>  public static long getKeyDataStructureSize(int rlength, int flength, int qlength) {<a name="line.215"></a>
<span class="sourceLineNo">216</span>    return (long) KeyValue.KEY_INFRASTRUCTURE_SIZE + rlength + flength + qlength;<a name="line.216"></a>
<span class="sourceLineNo">217</span>  }<a name="line.217"></a>
<span class="sourceLineNo">218</span><a name="line.218"></a>
<span class="sourceLineNo">219</span>  /**<a name="line.219"></a>
<span class="sourceLineNo">220</span>   * Key type.<a name="line.220"></a>
<span class="sourceLineNo">221</span>   * Has space for other key types to be added later.  Cannot rely on<a name="line.221"></a>
<span class="sourceLineNo">222</span>   * enum ordinals . They change if item is removed or moved.  Do our own codes.<a name="line.222"></a>
<span class="sourceLineNo">223</span>   */<a name="line.223"></a>
<span class="sourceLineNo">224</span>  public static enum Type {<a name="line.224"></a>
<span class="sourceLineNo">225</span>    Minimum((byte)0),<a name="line.225"></a>
<span class="sourceLineNo">226</span>    Put((byte)4),<a name="line.226"></a>
<span class="sourceLineNo">227</span><a name="line.227"></a>
<span class="sourceLineNo">228</span>    Delete((byte)8),<a name="line.228"></a>
<span class="sourceLineNo">229</span>    DeleteFamilyVersion((byte)10),<a name="line.229"></a>
<span class="sourceLineNo">230</span>    DeleteColumn((byte)12),<a name="line.230"></a>
<span class="sourceLineNo">231</span>    DeleteFamily((byte)14),<a name="line.231"></a>
<span class="sourceLineNo">232</span><a name="line.232"></a>
<span class="sourceLineNo">233</span>    // Maximum is used when searching; you look from maximum on down.<a name="line.233"></a>
<span class="sourceLineNo">234</span>    Maximum((byte)255);<a name="line.234"></a>
<span class="sourceLineNo">235</span><a name="line.235"></a>
<span class="sourceLineNo">236</span>    private final byte code;<a name="line.236"></a>
<span class="sourceLineNo">237</span><a name="line.237"></a>
<span class="sourceLineNo">238</span>    Type(final byte c) {<a name="line.238"></a>
<span class="sourceLineNo">239</span>      this.code = c;<a name="line.239"></a>
<span class="sourceLineNo">240</span>    }<a name="line.240"></a>
<span class="sourceLineNo">241</span><a name="line.241"></a>
<span class="sourceLineNo">242</span>    public byte getCode() {<a name="line.242"></a>
<span class="sourceLineNo">243</span>      return this.code;<a name="line.243"></a>
<span class="sourceLineNo">244</span>    }<a name="line.244"></a>
<span class="sourceLineNo">245</span><a name="line.245"></a>
<span class="sourceLineNo">246</span>    private static Type[] codeArray = new Type[256];<a name="line.246"></a>
<span class="sourceLineNo">247</span><a name="line.247"></a>
<span class="sourceLineNo">248</span>    static {<a name="line.248"></a>
<span class="sourceLineNo">249</span>      for (Type t : Type.values()) {<a name="line.249"></a>
<span class="sourceLineNo">250</span>        codeArray[t.code &amp; 0xff] = t;<a name="line.250"></a>
<span class="sourceLineNo">251</span>      }<a name="line.251"></a>
<span class="sourceLineNo">252</span>    }<a name="line.252"></a>
<span class="sourceLineNo">253</span><a name="line.253"></a>
<span class="sourceLineNo">254</span>    /**<a name="line.254"></a>
<span class="sourceLineNo">255</span>     * True to indicate that the byte b is a valid type.<a name="line.255"></a>
<span class="sourceLineNo">256</span>     * @param b byte to check<a name="line.256"></a>
<span class="sourceLineNo">257</span>     * @return true or false<a name="line.257"></a>
<span class="sourceLineNo">258</span>     */<a name="line.258"></a>
<span class="sourceLineNo">259</span>    static boolean isValidType(byte b) {<a name="line.259"></a>
<span class="sourceLineNo">260</span>      return codeArray[b &amp; 0xff] != null;<a name="line.260"></a>
<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
<span class="sourceLineNo">262</span><a name="line.262"></a>
<span class="sourceLineNo">263</span>    /**<a name="line.263"></a>
<span class="sourceLineNo">264</span>     * Cannot rely on enum ordinals . They change if item is removed or moved.<a name="line.264"></a>
<span class="sourceLineNo">265</span>     * Do our own codes.<a name="line.265"></a>
<span class="sourceLineNo">266</span>     * @param b<a name="line.266"></a>
<span class="sourceLineNo">267</span>     * @return Type associated with passed code.<a name="line.267"></a>
<span class="sourceLineNo">268</span>     */<a name="line.268"></a>
<span class="sourceLineNo">269</span>    public static Type codeToType(final byte b) {<a name="line.269"></a>
<span class="sourceLineNo">270</span>      Type t = codeArray[b &amp; 0xff];<a name="line.270"></a>
<span class="sourceLineNo">271</span>      if (t != null) {<a name="line.271"></a>
<span class="sourceLineNo">272</span>        return t;<a name="line.272"></a>
<span class="sourceLineNo">273</span>      }<a name="line.273"></a>
<span class="sourceLineNo">274</span>      throw new RuntimeException("Unknown code " + b);<a name="line.274"></a>
<span class="sourceLineNo">275</span>    }<a name="line.275"></a>
<span class="sourceLineNo">276</span>  }<a name="line.276"></a>
<span class="sourceLineNo">277</span><a name="line.277"></a>
<span class="sourceLineNo">278</span>  /**<a name="line.278"></a>
<span class="sourceLineNo">279</span>   * Lowest possible key.<a name="line.279"></a>
<span class="sourceLineNo">280</span>   * Makes a Key with highest possible Timestamp, empty row and column.  No<a name="line.280"></a>
<span class="sourceLineNo">281</span>   * key can be equal or lower than this one in memstore or in store file.<a name="line.281"></a>
<span class="sourceLineNo">282</span>   */<a name="line.282"></a>
<span class="sourceLineNo">283</span>  public static final KeyValue LOWESTKEY =<a name="line.283"></a>
<span class="sourceLineNo">284</span>    new KeyValue(HConstants.EMPTY_BYTE_ARRAY, HConstants.LATEST_TIMESTAMP);<a name="line.284"></a>
<span class="sourceLineNo">285</span><a name="line.285"></a>
<span class="sourceLineNo">286</span>  ////<a name="line.286"></a>
<span class="sourceLineNo">287</span>  // KeyValue core instance fields.<a name="line.287"></a>
<span class="sourceLineNo">288</span>  protected byte [] bytes = null;  // an immutable byte array that contains the KV<a name="line.288"></a>
<span class="sourceLineNo">289</span>  protected int offset = 0;  // offset into bytes buffer KV starts at<a name="line.289"></a>
<span class="sourceLineNo">290</span>  protected int length = 0;  // length of the KV starting from offset.<a name="line.290"></a>
<span class="sourceLineNo">291</span><a name="line.291"></a>
<span class="sourceLineNo">292</span>  /** Here be dragons **/<a name="line.292"></a>
<span class="sourceLineNo">293</span><a name="line.293"></a>
<span class="sourceLineNo">294</span>  /**<a name="line.294"></a>
<span class="sourceLineNo">295</span>   * used to achieve atomic operations in the memstore.<a name="line.295"></a>
<span class="sourceLineNo">296</span>   */<a name="line.296"></a>
<span class="sourceLineNo">297</span>  @Override<a name="line.297"></a>
<span class="sourceLineNo">298</span>  public long getSequenceId() {<a name="line.298"></a>
<span class="sourceLineNo">299</span>    return seqId;<a name="line.299"></a>
<span class="sourceLineNo">300</span>  }<a name="line.300"></a>
<span class="sourceLineNo">301</span><a name="line.301"></a>
<span class="sourceLineNo">302</span>  @Override<a name="line.302"></a>
<span class="sourceLineNo">303</span>  public void setSequenceId(long seqId) {<a name="line.303"></a>
<span class="sourceLineNo">304</span>    this.seqId = seqId;<a name="line.304"></a>
<span class="sourceLineNo">305</span>  }<a name="line.305"></a>
<span class="sourceLineNo">306</span><a name="line.306"></a>
<span class="sourceLineNo">307</span>  // multi-version concurrency control version.  default value is 0, aka do not care.<a name="line.307"></a>
<span class="sourceLineNo">308</span>  private long seqId = 0;<a name="line.308"></a>
<span class="sourceLineNo">309</span><a name="line.309"></a>
<span class="sourceLineNo">310</span>  /** Dragon time over, return to normal business */<a name="line.310"></a>
<span class="sourceLineNo">311</span><a name="line.311"></a>
<span class="sourceLineNo">312</span><a name="line.312"></a>
<span class="sourceLineNo">313</span>  /** Writable Constructor -- DO NOT USE */<a name="line.313"></a>
<span class="sourceLineNo">314</span>  public KeyValue() {}<a name="line.314"></a>
<span class="sourceLineNo">315</span><a name="line.315"></a>
<span class="sourceLineNo">316</span>  /**<a name="line.316"></a>
<span class="sourceLineNo">317</span>   * Creates a KeyValue from the start of the specified byte array.<a name="line.317"></a>
<span class="sourceLineNo">318</span>   * Presumes &lt;code&gt;bytes&lt;/code&gt; content is formatted as a KeyValue blob.<a name="line.318"></a>
<span class="sourceLineNo">319</span>   * @param bytes byte array<a name="line.319"></a>
<span class="sourceLineNo">320</span>   */<a name="line.320"></a>
<span class="sourceLineNo">321</span>  public KeyValue(final byte [] bytes) {<a name="line.321"></a>
<span class="sourceLineNo">322</span>    this(bytes, 0);<a name="line.322"></a>
<span class="sourceLineNo">323</span>  }<a name="line.323"></a>
<span class="sourceLineNo">324</span><a name="line.324"></a>
<span class="sourceLineNo">325</span>  /**<a name="line.325"></a>
<span class="sourceLineNo">326</span>   * Creates a KeyValue from the specified byte array and offset.<a name="line.326"></a>
<span class="sourceLineNo">327</span>   * Presumes &lt;code&gt;bytes&lt;/code&gt; content starting at &lt;code&gt;offset&lt;/code&gt; is<a name="line.327"></a>
<span class="sourceLineNo">328</span>   * formatted as a KeyValue blob.<a name="line.328"></a>
<span class="sourceLineNo">329</span>   * @param bytes byte array<a name="line.329"></a>
<span class="sourceLineNo">330</span>   * @param offset offset to start of KeyValue<a name="line.330"></a>
<span class="sourceLineNo">331</span>   */<a name="line.331"></a>
<span class="sourceLineNo">332</span>  public KeyValue(final byte [] bytes, final int offset) {<a name="line.332"></a>
<span class="sourceLineNo">333</span>    this(bytes, offset, getLength(bytes, offset));<a name="line.333"></a>
<span class="sourceLineNo">334</span>  }<a name="line.334"></a>
<span class="sourceLineNo">335</span><a name="line.335"></a>
<span class="sourceLineNo">336</span>  /**<a name="line.336"></a>
<span class="sourceLineNo">337</span>   * Creates a KeyValue from the specified byte array, starting at offset, and<a name="line.337"></a>
<span class="sourceLineNo">338</span>   * for length &lt;code&gt;length&lt;/code&gt;.<a name="line.338"></a>
<span class="sourceLineNo">339</span>   * @param bytes byte array<a name="line.339"></a>
<span class="sourceLineNo">340</span>   * @param offset offset to start of the KeyValue<a name="line.340"></a>
<span class="sourceLineNo">341</span>   * @param length length of the KeyValue<a name="line.341"></a>
<span class="sourceLineNo">342</span>   */<a name="line.342"></a>
<span class="sourceLineNo">343</span>  public KeyValue(final byte[] bytes, final int offset, final int length) {<a name="line.343"></a>
<span class="sourceLineNo">344</span>    KeyValueUtil.checkKeyValueBytes(bytes, offset, length, true);<a name="line.344"></a>
<span class="sourceLineNo">345</span>    this.bytes = bytes;<a name="line.345"></a>
<span class="sourceLineNo">346</span>    this.offset = offset;<a name="line.346"></a>
<span class="sourceLineNo">347</span>    this.length = length;<a name="line.347"></a>
<span class="sourceLineNo">348</span>  }<a name="line.348"></a>
<span class="sourceLineNo">349</span><a name="line.349"></a>
<span class="sourceLineNo">350</span>  /**<a name="line.350"></a>
<span class="sourceLineNo">351</span>   * Creates a KeyValue from the specified byte array, starting at offset, and<a name="line.351"></a>
<span class="sourceLineNo">352</span>   * for length &lt;code&gt;length&lt;/code&gt;.<a name="line.352"></a>
<span class="sourceLineNo">353</span>   *<a name="line.353"></a>
<span class="sourceLineNo">354</span>   * @param bytes  byte array<a name="line.354"></a>
<span class="sourceLineNo">355</span>   * @param offset offset to start of the KeyValue<a name="line.355"></a>
<span class="sourceLineNo">356</span>   * @param length length of the KeyValue<a name="line.356"></a>
<span class="sourceLineNo">357</span>   * @param ts<a name="line.357"></a>
<span class="sourceLineNo">358</span>   */<a name="line.358"></a>
<span class="sourceLineNo">359</span>  public KeyValue(final byte[] bytes, final int offset, final int length, long ts) {<a name="line.359"></a>
<span class="sourceLineNo">360</span>    this(bytes, offset, length, null, 0, 0, null, 0, 0, ts, Type.Maximum, null, 0, 0, null);<a name="line.360"></a>
<span class="sourceLineNo">361</span>  }<a name="line.361"></a>
<span class="sourceLineNo">362</span><a name="line.362"></a>
<span class="sourceLineNo">363</span>  /** Constructors that build a new backing byte array from fields */<a name="line.363"></a>
<span class="sourceLineNo">364</span><a name="line.364"></a>
<span class="sourceLineNo">365</span>  /**<a name="line.365"></a>
<span class="sourceLineNo">366</span>   * Constructs KeyValue structure filled with null value.<a name="line.366"></a>
<span class="sourceLineNo">367</span>   * Sets type to {@link KeyValue.Type#Maximum}<a name="line.367"></a>
<span class="sourceLineNo">368</span>   * @param row - row key (arbitrary byte array)<a name="line.368"></a>
<span class="sourceLineNo">369</span>   * @param timestamp<a name="line.369"></a>
<span class="sourceLineNo">370</span>   */<a name="line.370"></a>
<span class="sourceLineNo">371</span>  public KeyValue(final byte [] row, final long timestamp) {<a name="line.371"></a>
<span class="sourceLineNo">372</span>    this(row, null, null, timestamp, Type.Maximum, null);<a name="line.372"></a>
<span class="sourceLineNo">373</span>  }<a name="line.373"></a>
<span class="sourceLineNo">374</span><a name="line.374"></a>
<span class="sourceLineNo">375</span>  /**<a name="line.375"></a>
<span class="sourceLineNo">376</span>   * Constructs KeyValue structure filled with null value.<a name="line.376"></a>
<span class="sourceLineNo">377</span>   * @param row - row key (arbitrary byte array)<a name="line.377"></a>
<span class="sourceLineNo">378</span>   * @param timestamp<a name="line.378"></a>
<span class="sourceLineNo">379</span>   */<a name="line.379"></a>
<span class="sourceLineNo">380</span>  public KeyValue(final byte [] row, final long timestamp, Type type) {<a name="line.380"></a>
<span class="sourceLineNo">381</span>    this(row, null, null, timestamp, type, null);<a name="line.381"></a>
<span class="sourceLineNo">382</span>  }<a name="line.382"></a>
<span class="sourceLineNo">383</span><a name="line.383"></a>
<span class="sourceLineNo">384</span>  /**<a name="line.384"></a>
<span class="sourceLineNo">385</span>   * Constructs KeyValue structure filled with null value.<a name="line.385"></a>
<span class="sourceLineNo">386</span>   * Sets type to {@link KeyValue.Type#Maximum}<a name="line.386"></a>
<span class="sourceLineNo">387</span>   * @param row - row key (arbitrary byte array)<a name="line.387"></a>
<span class="sourceLineNo">388</span>   * @param family family name<a name="line.388"></a>
<span class="sourceLineNo">389</span>   * @param qualifier column qualifier<a name="line.389"></a>
<span class="sourceLineNo">390</span>   */<a name="line.390"></a>
<span class="sourceLineNo">391</span>  public KeyValue(final byte [] row, final byte [] family,<a name="line.391"></a>
<span class="sourceLineNo">392</span>      final byte [] qualifier) {<a name="line.392"></a>
<span class="sourceLineNo">393</span>    this(row, family, qualifier, HConstants.LATEST_TIMESTAMP, Type.Maximum);<a name="line.393"></a>
<span class="sourceLineNo">394</span>  }<a name="line.394"></a>
<span class="sourceLineNo">395</span><a name="line.395"></a>
<span class="sourceLineNo">396</span>  /**<a name="line.396"></a>
<span class="sourceLineNo">397</span>   * Constructs KeyValue structure as a put filled with specified values and<a name="line.397"></a>
<span class="sourceLineNo">398</span>   * LATEST_TIMESTAMP.<a name="line.398"></a>
<span class="sourceLineNo">399</span>   * @param row - row key (arbitrary byte array)<a name="line.399"></a>
<span class="sourceLineNo">400</span>   * @param family family name<a name="line.400"></a>
<span class="sourceLineNo">401</span>   * @param qualifier column qualifier<a name="line.401"></a>
<span class="sourceLineNo">402</span>   */<a name="line.402"></a>
<span class="sourceLineNo">403</span>  public KeyValue(final byte [] row, final byte [] family,<a name="line.403"></a>
<span class="sourceLineNo">404</span>      final byte [] qualifier, final byte [] value) {<a name="line.404"></a>
<span class="sourceLineNo">405</span>    this(row, family, qualifier, HConstants.LATEST_TIMESTAMP, Type.Put, value);<a name="line.405"></a>
<span class="sourceLineNo">406</span>  }<a name="line.406"></a>
<span class="sourceLineNo">407</span><a name="line.407"></a>
<span class="sourceLineNo">408</span>  /**<a name="line.408"></a>
<span class="sourceLineNo">409</span>   * Constructs KeyValue structure filled with specified values.<a name="line.409"></a>
<span class="sourceLineNo">410</span>   * @param row row key<a name="line.410"></a>
<span class="sourceLineNo">411</span>   * @param family family name<a name="line.411"></a>
<span class="sourceLineNo">412</span>   * @param qualifier column qualifier<a name="line.412"></a>
<span class="sourceLineNo">413</span>   * @param timestamp version timestamp<a name="line.413"></a>
<span class="sourceLineNo">414</span>   * @param type key type<a name="line.414"></a>
<span class="sourceLineNo">415</span>   * @throws IllegalArgumentException<a name="line.415"></a>
<span class="sourceLineNo">416</span>   */<a name="line.416"></a>
<span class="sourceLineNo">417</span>  public KeyValue(final byte[] row, final byte[] family,<a name="line.417"></a>
<span class="sourceLineNo">418</span>      final byte[] qualifier, final long timestamp, Type type) {<a name="line.418"></a>
<span class="sourceLineNo">419</span>    this(row, family, qualifier, timestamp, type, null);<a name="line.419"></a>
<span class="sourceLineNo">420</span>  }<a name="line.420"></a>
<span class="sourceLineNo">421</span><a name="line.421"></a>
<span class="sourceLineNo">422</span>  /**<a name="line.422"></a>
<span class="sourceLineNo">423</span>   * Constructs KeyValue structure filled with specified values.<a name="line.423"></a>
<span class="sourceLineNo">424</span>   * @param row row key<a name="line.424"></a>
<span class="sourceLineNo">425</span>   * @param family family name<a name="line.425"></a>
<span class="sourceLineNo">426</span>   * @param qualifier column qualifier<a name="line.426"></a>
<span class="sourceLineNo">427</span>   * @param timestamp version timestamp<a name="line.427"></a>
<span class="sourceLineNo">428</span>   * @param value column value<a name="line.428"></a>
<span class="sourceLineNo">429</span>   * @throws IllegalArgumentException<a name="line.429"></a>
<span class="sourceLineNo">430</span>   */<a name="line.430"></a>
<span class="sourceLineNo">431</span>  public KeyValue(final byte[] row, final byte[] family,<a name="line.431"></a>
<span class="sourceLineNo">432</span>      final byte[] qualifier, final long timestamp, final byte[] value) {<a name="line.432"></a>
<span class="sourceLineNo">433</span>    this(row, family, qualifier, timestamp, Type.Put, value);<a name="line.433"></a>
<span class="sourceLineNo">434</span>  }<a name="line.434"></a>
<span class="sourceLineNo">435</span><a name="line.435"></a>
<span class="sourceLineNo">436</span>  /**<a name="line.436"></a>
<span class="sourceLineNo">437</span>   * Constructs KeyValue structure filled with specified values.<a name="line.437"></a>
<span class="sourceLineNo">438</span>   * @param row row key<a name="line.438"></a>
<span class="sourceLineNo">439</span>   * @param family family name<a name="line.439"></a>
<span class="sourceLineNo">440</span>   * @param qualifier column qualifier<a name="line.440"></a>
<span class="sourceLineNo">441</span>   * @param timestamp version timestamp<a name="line.441"></a>
<span class="sourceLineNo">442</span>   * @param value column value<a name="line.442"></a>
<span class="sourceLineNo">443</span>   * @param tags tags<a name="line.443"></a>
<span class="sourceLineNo">444</span>   * @throws IllegalArgumentException<a name="line.444"></a>
<span class="sourceLineNo">445</span>   */<a name="line.445"></a>
<span class="sourceLineNo">446</span>  public KeyValue(final byte[] row, final byte[] family,<a name="line.446"></a>
<span class="sourceLineNo">447</span>      final byte[] qualifier, final long timestamp, final byte[] value,<a name="line.447"></a>
<span class="sourceLineNo">448</span>      final Tag[] tags) {<a name="line.448"></a>
<span class="sourceLineNo">449</span>    this(row, family, qualifier, timestamp, value, tags != null ? Arrays.asList(tags) : null);<a name="line.449"></a>
<span class="sourceLineNo">450</span>  }<a name="line.450"></a>
<span class="sourceLineNo">451</span><a name="line.451"></a>
<span class="sourceLineNo">452</span>  /**<a name="line.452"></a>
<span class="sourceLineNo">453</span>   * Constructs KeyValue structure filled with specified values.<a name="line.453"></a>
<span class="sourceLineNo">454</span>   * @param row row key<a name="line.454"></a>
<span class="sourceLineNo">455</span>   * @param family family name<a name="line.455"></a>
<span class="sourceLineNo">456</span>   * @param qualifier column qualifier<a name="line.456"></a>
<span class="sourceLineNo">457</span>   * @param timestamp version timestamp<a name="line.457"></a>
<span class="sourceLineNo">458</span>   * @param value column value<a name="line.458"></a>
<span class="sourceLineNo">459</span>   * @param tags tags non-empty list of tags or null<a name="line.459"></a>
<span class="sourceLineNo">460</span>   * @throws IllegalArgumentException<a name="line.460"></a>
<span class="sourceLineNo">461</span>   */<a name="line.461"></a>
<span class="sourceLineNo">462</span>  public KeyValue(final byte[] row, final byte[] family,<a name="line.462"></a>
<span class="sourceLineNo">463</span>      final byte[] qualifier, final long timestamp, final byte[] value,<a name="line.463"></a>
<span class="sourceLineNo">464</span>      final List&lt;Tag&gt; tags) {<a name="line.464"></a>
<span class="sourceLineNo">465</span>    this(row, 0, row==null ? 0 : row.length,<a name="line.465"></a>
<span class="sourceLineNo">466</span>      family, 0, family==null ? 0 : family.length,<a name="line.466"></a>
<span class="sourceLineNo">467</span>      qualifier, 0, qualifier==null ? 0 : qualifier.length,<a name="line.467"></a>
<span class="sourceLineNo">468</span>      timestamp, Type.Put,<a name="line.468"></a>
<span class="sourceLineNo">469</span>      value, 0, value==null ? 0 : value.length, tags);<a name="line.469"></a>
<span class="sourceLineNo">470</span>  }<a name="line.470"></a>
<span class="sourceLineNo">471</span><a name="line.471"></a>
<span class="sourceLineNo">472</span>  /**<a name="line.472"></a>
<span class="sourceLineNo">473</span>   * Constructs KeyValue structure filled with specified values.<a name="line.473"></a>
<span class="sourceLineNo">474</span>   * @param row row key<a name="line.474"></a>
<span class="sourceLineNo">475</span>   * @param family family name<a name="line.475"></a>
<span class="sourceLineNo">476</span>   * @param qualifier column qualifier<a name="line.476"></a>
<span class="sourceLineNo">477</span>   * @param timestamp version timestamp<a name="line.477"></a>
<span class="sourceLineNo">478</span>   * @param type key type<a name="line.478"></a>
<span class="sourceLineNo">479</span>   * @param value column value<a name="line.479"></a>
<span class="sourceLineNo">480</span>   * @throws IllegalArgumentException<a name="line.480"></a>
<span class="sourceLineNo">481</span>   */<a name="line.481"></a>
<span class="sourceLineNo">482</span>  public KeyValue(final byte[] row, final byte[] family,<a name="line.482"></a>
<span class="sourceLineNo">483</span>      final byte[] qualifier, final long timestamp, Type type,<a name="line.483"></a>
<span class="sourceLineNo">484</span>      final byte[] value) {<a name="line.484"></a>
<span class="sourceLineNo">485</span>    this(row, 0, len(row),   family, 0, len(family),   qualifier, 0, len(qualifier),<a name="line.485"></a>
<span class="sourceLineNo">486</span>        timestamp, type,   value, 0, len(value));<a name="line.486"></a>
<span class="sourceLineNo">487</span>  }<a name="line.487"></a>
<span class="sourceLineNo">488</span><a name="line.488"></a>
<span class="sourceLineNo">489</span>  /**<a name="line.489"></a>
<span class="sourceLineNo">490</span>   * Constructs KeyValue structure filled with specified values.<a name="line.490"></a>
<span class="sourceLineNo">491</span>   * &lt;p&gt;<a name="line.491"></a>
<span class="sourceLineNo">492</span>   * Column is split into two fields, family and qualifier.<a name="line.492"></a>
<span class="sourceLineNo">493</span>   * @param row row key<a name="line.493"></a>
<span class="sourceLineNo">494</span>   * @param family family name<a name="line.494"></a>
<span class="sourceLineNo">495</span>   * @param qualifier column qualifier<a name="line.495"></a>
<span class="sourceLineNo">496</span>   * @param timestamp version timestamp<a name="line.496"></a>
<span class="sourceLineNo">497</span>   * @param type key type<a name="line.497"></a>
<span class="sourceLineNo">498</span>   * @param value column value<a name="line.498"></a>
<span class="sourceLineNo">499</span>   * @throws IllegalArgumentException<a name="line.499"></a>
<span class="sourceLineNo">500</span>   */<a name="line.500"></a>
<span class="sourceLineNo">501</span>  public KeyValue(final byte[] row, final byte[] family,<a name="line.501"></a>
<span class="sourceLineNo">502</span>      final byte[] qualifier, final long timestamp, Type type,<a name="line.502"></a>
<span class="sourceLineNo">503</span>      final byte[] value, final List&lt;Tag&gt; tags) {<a name="line.503"></a>
<span class="sourceLineNo">504</span>    this(row, family, qualifier, 0, qualifier==null ? 0 : qualifier.length,<a name="line.504"></a>
<span class="sourceLineNo">505</span>        timestamp, type, value, 0, value==null ? 0 : value.length, tags);<a name="line.505"></a>
<span class="sourceLineNo">506</span>  }<a name="line.506"></a>
<span class="sourceLineNo">507</span><a name="line.507"></a>
<span class="sourceLineNo">508</span>  /**<a name="line.508"></a>
<span class="sourceLineNo">509</span>   * Constructs KeyValue structure filled with specified values.<a name="line.509"></a>
<span class="sourceLineNo">510</span>   * @param row row key<a name="line.510"></a>
<span class="sourceLineNo">511</span>   * @param family family name<a name="line.511"></a>
<span class="sourceLineNo">512</span>   * @param qualifier column qualifier<a name="line.512"></a>
<span class="sourceLineNo">513</span>   * @param timestamp version timestamp<a name="line.513"></a>
<span class="sourceLineNo">514</span>   * @param type key type<a name="line.514"></a>
<span class="sourceLineNo">515</span>   * @param value column value<a name="line.515"></a>
<span class="sourceLineNo">516</span>   * @throws IllegalArgumentException<a name="line.516"></a>
<span class="sourceLineNo">517</span>   */<a name="line.517"></a>
<span class="sourceLineNo">518</span>  public KeyValue(final byte[] row, final byte[] family,<a name="line.518"></a>
<span class="sourceLineNo">519</span>      final byte[] qualifier, final long timestamp, Type type,<a name="line.519"></a>
<span class="sourceLineNo">520</span>      final byte[] value, final byte[] tags) {<a name="line.520"></a>
<span class="sourceLineNo">521</span>    this(row, family, qualifier, 0, qualifier==null ? 0 : qualifier.length,<a name="line.521"></a>
<span class="sourceLineNo">522</span>        timestamp, type, value, 0, value==null ? 0 : value.length, tags);<a name="line.522"></a>
<span class="sourceLineNo">523</span>  }<a name="line.523"></a>
<span class="sourceLineNo">524</span><a name="line.524"></a>
<span class="sourceLineNo">525</span>  /**<a name="line.525"></a>
<span class="sourceLineNo">526</span>   * Constructs KeyValue structure filled with specified values.<a name="line.526"></a>
<span class="sourceLineNo">527</span>   * @param row row key<a name="line.527"></a>
<span class="sourceLineNo">528</span>   * @param family family name<a name="line.528"></a>
<span class="sourceLineNo">529</span>   * @param qualifier column qualifier<a name="line.529"></a>
<span class="sourceLineNo">530</span>   * @param qoffset qualifier offset<a name="line.530"></a>
<span class="sourceLineNo">531</span>   * @param qlength qualifier length<a name="line.531"></a>
<span class="sourceLineNo">532</span>   * @param timestamp version timestamp<a name="line.532"></a>
<span class="sourceLineNo">533</span>   * @param type key type<a name="line.533"></a>
<span class="sourceLineNo">534</span>   * @param value column value<a name="line.534"></a>
<span class="sourceLineNo">535</span>   * @param voffset value offset<a name="line.535"></a>
<span class="sourceLineNo">536</span>   * @param vlength value length<a name="line.536"></a>
<span class="sourceLineNo">537</span>   * @throws IllegalArgumentException<a name="line.537"></a>
<span class="sourceLineNo">538</span>   */<a name="line.538"></a>
<span class="sourceLineNo">539</span>  public KeyValue(byte [] row, byte [] family,<a name="line.539"></a>
<span class="sourceLineNo">540</span>      byte [] qualifier, int qoffset, int qlength, long timestamp, Type type,<a name="line.540"></a>
<span class="sourceLineNo">541</span>      byte [] value, int voffset, int vlength, List&lt;Tag&gt; tags) {<a name="line.541"></a>
<span class="sourceLineNo">542</span>    this(row, 0, row==null ? 0 : row.length,<a name="line.542"></a>
<span class="sourceLineNo">543</span>        family, 0, family==null ? 0 : family.length,<a name="line.543"></a>
<span class="sourceLineNo">544</span>        qualifier, qoffset, qlength, timestamp, type,<a name="line.544"></a>
<span class="sourceLineNo">545</span>        value, voffset, vlength, tags);<a name="line.545"></a>
<span class="sourceLineNo">546</span>  }<a name="line.546"></a>
<span class="sourceLineNo">547</span><a name="line.547"></a>
<span class="sourceLineNo">548</span>  /**<a name="line.548"></a>
<span class="sourceLineNo">549</span>   * @param row<a name="line.549"></a>
<span class="sourceLineNo">550</span>   * @param family<a name="line.550"></a>
<span class="sourceLineNo">551</span>   * @param qualifier<a name="line.551"></a>
<span class="sourceLineNo">552</span>   * @param qoffset<a name="line.552"></a>
<span class="sourceLineNo">553</span>   * @param qlength<a name="line.553"></a>
<span class="sourceLineNo">554</span>   * @param timestamp<a name="line.554"></a>
<span class="sourceLineNo">555</span>   * @param type<a name="line.555"></a>
<span class="sourceLineNo">556</span>   * @param value<a name="line.556"></a>
<span class="sourceLineNo">557</span>   * @param voffset<a name="line.557"></a>
<span class="sourceLineNo">558</span>   * @param vlength<a name="line.558"></a>
<span class="sourceLineNo">559</span>   * @param tags<a name="line.559"></a>
<span class="sourceLineNo">560</span>   */<a name="line.560"></a>
<span class="sourceLineNo">561</span>  public KeyValue(byte [] row, byte [] family,<a name="line.561"></a>
<span class="sourceLineNo">562</span>      byte [] qualifier, int qoffset, int qlength, long timestamp, Type type,<a name="line.562"></a>
<span class="sourceLineNo">563</span>      byte [] value, int voffset, int vlength, byte[] tags) {<a name="line.563"></a>
<span class="sourceLineNo">564</span>    this(row, 0, row==null ? 0 : row.length,<a name="line.564"></a>
<span class="sourceLineNo">565</span>        family, 0, family==null ? 0 : family.length,<a name="line.565"></a>
<span class="sourceLineNo">566</span>        qualifier, qoffset, qlength, timestamp, type,<a name="line.566"></a>
<span class="sourceLineNo">567</span>        value, voffset, vlength, tags, 0, tags==null ? 0 : tags.length);<a name="line.567"></a>
<span class="sourceLineNo">568</span>  }<a name="line.568"></a>
<span class="sourceLineNo">569</span><a name="line.569"></a>
<span class="sourceLineNo">570</span>  /**<a name="line.570"></a>
<span class="sourceLineNo">571</span>   * Constructs KeyValue structure filled with specified values.<a name="line.571"></a>
<span class="sourceLineNo">572</span>   * &lt;p&gt;<a name="line.572"></a>
<span class="sourceLineNo">573</span>   * Column is split into two fields, family and qualifier.<a name="line.573"></a>
<span class="sourceLineNo">574</span>   * @param row row key<a name="line.574"></a>
<span class="sourceLineNo">575</span>   * @throws IllegalArgumentException<a name="line.575"></a>
<span class="sourceLineNo">576</span>   */<a name="line.576"></a>
<span class="sourceLineNo">577</span>  public KeyValue(final byte [] row, final int roffset, final int rlength,<a name="line.577"></a>
<span class="sourceLineNo">578</span>      final byte [] family, final int foffset, final int flength,<a name="line.578"></a>
<span class="sourceLineNo">579</span>      final byte [] qualifier, final int qoffset, final int qlength,<a name="line.579"></a>
<span class="sourceLineNo">580</span>      final long timestamp, final Type type,<a name="line.580"></a>
<span class="sourceLineNo">581</span>      final byte [] value, final int voffset, final int vlength) {<a name="line.581"></a>
<span class="sourceLineNo">582</span>    this(row, roffset, rlength, family, foffset, flength, qualifier, qoffset,<a name="line.582"></a>
<span class="sourceLineNo">583</span>      qlength, timestamp, type, value, voffset, vlength, null);<a name="line.583"></a>
<span class="sourceLineNo">584</span>  }<a name="line.584"></a>
<span class="sourceLineNo">585</span><a name="line.585"></a>
<span class="sourceLineNo">586</span>  /**<a name="line.586"></a>
<span class="sourceLineNo">587</span>   * Constructs KeyValue structure filled with specified values. Uses the provided buffer as the<a name="line.587"></a>
<span class="sourceLineNo">588</span>   * data buffer.<a name="line.588"></a>
<span class="sourceLineNo">589</span>   * &lt;p&gt;<a name="line.589"></a>
<span class="sourceLineNo">590</span>   * Column is split into two fields, family and qualifier.<a name="line.590"></a>
<span class="sourceLineNo">591</span>   *<a name="line.591"></a>
<span class="sourceLineNo">592</span>   * @param buffer the bytes buffer to use<a name="line.592"></a>
<span class="sourceLineNo">593</span>   * @param boffset buffer offset<a name="line.593"></a>
<span class="sourceLineNo">594</span>   * @param row row key<a name="line.594"></a>
<span class="sourceLineNo">595</span>   * @param roffset row offset<a name="line.595"></a>
<span class="sourceLineNo">596</span>   * @param rlength row length<a name="line.596"></a>
<span class="sourceLineNo">597</span>   * @param family family name<a name="line.597"></a>
<span class="sourceLineNo">598</span>   * @param foffset family offset<a name="line.598"></a>
<span class="sourceLineNo">599</span>   * @param flength family length<a name="line.599"></a>
<span class="sourceLineNo">600</span>   * @param qualifier column qualifier<a name="line.600"></a>
<span class="sourceLineNo">601</span>   * @param qoffset qualifier offset<a name="line.601"></a>
<span class="sourceLineNo">602</span>   * @param qlength qualifier length<a name="line.602"></a>
<span class="sourceLineNo">603</span>   * @param timestamp version timestamp<a name="line.603"></a>
<span class="sourceLineNo">604</span>   * @param type key type<a name="line.604"></a>
<span class="sourceLineNo">605</span>   * @param value column value<a name="line.605"></a>
<span class="sourceLineNo">606</span>   * @param voffset value offset<a name="line.606"></a>
<span class="sourceLineNo">607</span>   * @param vlength value length<a name="line.607"></a>
<span class="sourceLineNo">608</span>   * @param tags non-empty list of tags or null<a name="line.608"></a>
<span class="sourceLineNo">609</span>   * @throws IllegalArgumentException an illegal value was passed or there is insufficient space<a name="line.609"></a>
<span class="sourceLineNo">610</span>   * remaining in the buffer<a name="line.610"></a>
<span class="sourceLineNo">611</span>   */<a name="line.611"></a>
<span class="sourceLineNo">612</span>  public KeyValue(byte [] buffer, final int boffset,<a name="line.612"></a>
<span class="sourceLineNo">613</span>      final byte [] row, final int roffset, final int rlength,<a name="line.613"></a>
<span class="sourceLineNo">614</span>      final byte [] family, final int foffset, final int flength,<a name="line.614"></a>
<span class="sourceLineNo">615</span>      final byte [] qualifier, final int qoffset, final int qlength,<a name="line.615"></a>
<span class="sourceLineNo">616</span>      final long timestamp, final Type type,<a name="line.616"></a>
<span class="sourceLineNo">617</span>      final byte [] value, final int voffset, final int vlength,<a name="line.617"></a>
<span class="sourceLineNo">618</span>      final Tag[] tags) {<a name="line.618"></a>
<span class="sourceLineNo">619</span>     this.bytes  = buffer;<a name="line.619"></a>
<span class="sourceLineNo">620</span>     this.length = writeByteArray(buffer, boffset,<a name="line.620"></a>
<span class="sourceLineNo">621</span>         row, roffset, rlength,<a name="line.621"></a>
<span class="sourceLineNo">622</span>         family, foffset, flength, qualifier, qoffset, qlength,<a name="line.622"></a>
<span class="sourceLineNo">623</span>        timestamp, type, value, voffset, vlength, tags);<a name="line.623"></a>
<span class="sourceLineNo">624</span>     this.offset = boffset;<a name="line.624"></a>
<span class="sourceLineNo">625</span>   }<a name="line.625"></a>
<span class="sourceLineNo">626</span><a name="line.626"></a>
<span class="sourceLineNo">627</span>  /**<a name="line.627"></a>
<span class="sourceLineNo">628</span>   * Constructs KeyValue structure filled with specified values.<a name="line.628"></a>
<span class="sourceLineNo">629</span>   * &lt;p&gt;<a name="line.629"></a>
<span class="sourceLineNo">630</span>   * Column is split into two fields, family and qualifier.<a name="line.630"></a>
<span class="sourceLineNo">631</span>   * @param row row key<a name="line.631"></a>
<span class="sourceLineNo">632</span>   * @param roffset row offset<a name="line.632"></a>
<span class="sourceLineNo">633</span>   * @param rlength row length<a name="line.633"></a>
<span class="sourceLineNo">634</span>   * @param family family name<a name="line.634"></a>
<span class="sourceLineNo">635</span>   * @param foffset family offset<a name="line.635"></a>
<span class="sourceLineNo">636</span>   * @param flength family length<a name="line.636"></a>
<span class="sourceLineNo">637</span>   * @param qualifier column qualifier<a name="line.637"></a>
<span class="sourceLineNo">638</span>   * @param qoffset qualifier offset<a name="line.638"></a>
<span class="sourceLineNo">639</span>   * @param qlength qualifier length<a name="line.639"></a>
<span class="sourceLineNo">640</span>   * @param timestamp version timestamp<a name="line.640"></a>
<span class="sourceLineNo">641</span>   * @param type key type<a name="line.641"></a>
<span class="sourceLineNo">642</span>   * @param value column value<a name="line.642"></a>
<span class="sourceLineNo">643</span>   * @param voffset value offset<a name="line.643"></a>
<span class="sourceLineNo">644</span>   * @param vlength value length<a name="line.644"></a>
<span class="sourceLineNo">645</span>   * @param tags tags<a name="line.645"></a>
<span class="sourceLineNo">646</span>   * @throws IllegalArgumentException<a name="line.646"></a>
<span class="sourceLineNo">647</span>   */<a name="line.647"></a>
<span class="sourceLineNo">648</span>  public KeyValue(final byte [] row, final int roffset, final int rlength,<a name="line.648"></a>
<span class="sourceLineNo">649</span>      final byte [] family, final int foffset, final int flength,<a name="line.649"></a>
<span class="sourceLineNo">650</span>      final byte [] qualifier, final int qoffset, final int qlength,<a name="line.650"></a>
<span class="sourceLineNo">651</span>      final long timestamp, final Type type,<a name="line.651"></a>
<span class="sourceLineNo">652</span>      final byte [] value, final int voffset, final int vlength,<a name="line.652"></a>
<span class="sourceLineNo">653</span>      final List&lt;Tag&gt; tags) {<a name="line.653"></a>
<span class="sourceLineNo">654</span>    this.bytes = createByteArray(row, roffset, rlength,<a name="line.654"></a>
<span class="sourceLineNo">655</span>        family, foffset, flength, qualifier, qoffset, qlength,<a name="line.655"></a>
<span class="sourceLineNo">656</span>        timestamp, type, value, voffset, vlength, tags);<a name="line.656"></a>
<span class="sourceLineNo">657</span>    this.length = bytes.length;<a name="line.657"></a>
<span class="sourceLineNo">658</span>    this.offset = 0;<a name="line.658"></a>
<span class="sourceLineNo">659</span>  }<a name="line.659"></a>
<span class="sourceLineNo">660</span><a name="line.660"></a>
<span class="sourceLineNo">661</span>  /**<a name="line.661"></a>
<span class="sourceLineNo">662</span>   * @param row<a name="line.662"></a>
<span class="sourceLineNo">663</span>   * @param roffset<a name="line.663"></a>
<span class="sourceLineNo">664</span>   * @param rlength<a name="line.664"></a>
<span class="sourceLineNo">665</span>   * @param family<a name="line.665"></a>
<span class="sourceLineNo">666</span>   * @param foffset<a name="line.666"></a>
<span class="sourceLineNo">667</span>   * @param flength<a name="line.667"></a>
<span class="sourceLineNo">668</span>   * @param qualifier<a name="line.668"></a>
<span class="sourceLineNo">669</span>   * @param qoffset<a name="line.669"></a>
<span class="sourceLineNo">670</span>   * @param qlength<a name="line.670"></a>
<span class="sourceLineNo">671</span>   * @param timestamp<a name="line.671"></a>
<span class="sourceLineNo">672</span>   * @param type<a name="line.672"></a>
<span class="sourceLineNo">673</span>   * @param value<a name="line.673"></a>
<span class="sourceLineNo">674</span>   * @param voffset<a name="line.674"></a>
<span class="sourceLineNo">675</span>   * @param vlength<a name="line.675"></a>
<span class="sourceLineNo">676</span>   * @param tags<a name="line.676"></a>
<span class="sourceLineNo">677</span>   */<a name="line.677"></a>
<span class="sourceLineNo">678</span>  public KeyValue(final byte [] row, final int roffset, final int rlength,<a name="line.678"></a>
<span class="sourceLineNo">679</span>      final byte [] family, final int foffset, final int flength,<a name="line.679"></a>
<span class="sourceLineNo">680</span>      final byte [] qualifier, final int qoffset, final int qlength,<a name="line.680"></a>
<span class="sourceLineNo">681</span>      final long timestamp, final Type type,<a name="line.681"></a>
<span class="sourceLineNo">682</span>      final byte [] value, final int voffset, final int vlength,<a name="line.682"></a>
<span class="sourceLineNo">683</span>      final byte[] tags, final int tagsOffset, final int tagsLength) {<a name="line.683"></a>
<span class="sourceLineNo">684</span>    this.bytes = createByteArray(row, roffset, rlength,<a name="line.684"></a>
<span class="sourceLineNo">685</span>        family, foffset, flength, qualifier, qoffset, qlength,<a name="line.685"></a>
<span class="sourceLineNo">686</span>        timestamp, type, value, voffset, vlength, tags, tagsOffset, tagsLength);<a name="line.686"></a>
<span class="sourceLineNo">687</span>    this.length = bytes.length;<a name="line.687"></a>
<span class="sourceLineNo">688</span>    this.offset = 0;<a name="line.688"></a>
<span class="sourceLineNo">689</span>  }<a name="line.689"></a>
<span class="sourceLineNo">690</span><a name="line.690"></a>
<span class="sourceLineNo">691</span>  /**<a name="line.691"></a>
<span class="sourceLineNo">692</span>   * Constructs an empty KeyValue structure, with specified sizes.<a name="line.692"></a>
<span class="sourceLineNo">693</span>   * This can be used to partially fill up KeyValues.<a name="line.693"></a>
<span class="sourceLineNo">694</span>   * &lt;p&gt;<a name="line.694"></a>
<span class="sourceLineNo">695</span>   * Column is split into two fields, family and qualifier.<a name="line.695"></a>
<span class="sourceLineNo">696</span>   * @param rlength row length<a name="line.696"></a>
<span class="sourceLineNo">697</span>   * @param flength family length<a name="line.697"></a>
<span class="sourceLineNo">698</span>   * @param qlength qualifier length<a name="line.698"></a>
<span class="sourceLineNo">699</span>   * @param timestamp version timestamp<a name="line.699"></a>
<span class="sourceLineNo">700</span>   * @param type key type<a name="line.700"></a>
<span class="sourceLineNo">701</span>   * @param vlength value length<a name="line.701"></a>
<span class="sourceLineNo">702</span>   * @throws IllegalArgumentException<a name="line.702"></a>
<span class="sourceLineNo">703</span>   */<a name="line.703"></a>
<span class="sourceLineNo">704</span>  public KeyValue(final int rlength,<a name="line.704"></a>
<span class="sourceLineNo">705</span>      final int flength,<a name="line.705"></a>
<span class="sourceLineNo">706</span>      final int qlength,<a name="line.706"></a>
<span class="sourceLineNo">707</span>      final long timestamp, final Type type,<a name="line.707"></a>
<span class="sourceLineNo">708</span>      final int vlength) {<a name="line.708"></a>
<span class="sourceLineNo">709</span>    this(rlength, flength, qlength, timestamp, type, vlength, 0);<a name="line.709"></a>
<span class="sourceLineNo">710</span>  }<a name="line.710"></a>
<span class="sourceLineNo">711</span><a name="line.711"></a>
<span class="sourceLineNo">712</span>  /**<a name="line.712"></a>
<span class="sourceLineNo">713</span>   * Constructs an empty KeyValue structure, with specified sizes.<a name="line.713"></a>
<span class="sourceLineNo">714</span>   * This can be used to partially fill up KeyValues.<a name="line.714"></a>
<span class="sourceLineNo">715</span>   * &lt;p&gt;<a name="line.715"></a>
<span class="sourceLineNo">716</span>   * Column is split into two fields, family and qualifier.<a name="line.716"></a>
<span class="sourceLineNo">717</span>   * @param rlength row length<a name="line.717"></a>
<span class="sourceLineNo">718</span>   * @param flength family length<a name="line.718"></a>
<span class="sourceLineNo">719</span>   * @param qlength qualifier length<a name="line.719"></a>
<span class="sourceLineNo">720</span>   * @param timestamp version timestamp<a name="line.720"></a>
<span class="sourceLineNo">721</span>   * @param type key type<a name="line.721"></a>
<span class="sourceLineNo">722</span>   * @param vlength value length<a name="line.722"></a>
<span class="sourceLineNo">723</span>   * @param tagsLength<a name="line.723"></a>
<span class="sourceLineNo">724</span>   * @throws IllegalArgumentException<a name="line.724"></a>
<span class="sourceLineNo">725</span>   */<a name="line.725"></a>
<span class="sourceLineNo">726</span>  public KeyValue(final int rlength,<a name="line.726"></a>
<span class="sourceLineNo">727</span>      final int flength,<a name="line.727"></a>
<span class="sourceLineNo">728</span>      final int qlength,<a name="line.728"></a>
<span class="sourceLineNo">729</span>      final long timestamp, final Type type,<a name="line.729"></a>
<span class="sourceLineNo">730</span>      final int vlength, final int tagsLength) {<a name="line.730"></a>
<span class="sourceLineNo">731</span>    this.bytes = createEmptyByteArray(rlength, flength, qlength, timestamp, type, vlength,<a name="line.731"></a>
<span class="sourceLineNo">732</span>        tagsLength);<a name="line.732"></a>
<span class="sourceLineNo">733</span>    this.length = bytes.length;<a name="line.733"></a>
<span class="sourceLineNo">734</span>    this.offset = 0;<a name="line.734"></a>
<span class="sourceLineNo">735</span>  }<a name="line.735"></a>
<span class="sourceLineNo">736</span><a name="line.736"></a>
<span class="sourceLineNo">737</span><a name="line.737"></a>
<span class="sourceLineNo">738</span>  public KeyValue(byte[] row, int roffset, int rlength,<a name="line.738"></a>
<span class="sourceLineNo">739</span>                  byte[] family, int foffset, int flength,<a name="line.739"></a>
<span class="sourceLineNo">740</span>                  ByteBuffer qualifier, long ts, Type type, ByteBuffer value, List&lt;Tag&gt; tags) {<a name="line.740"></a>
<span class="sourceLineNo">741</span>    this.bytes = createByteArray(row, roffset, rlength, family, foffset, flength,<a name="line.741"></a>
<span class="sourceLineNo">742</span>        qualifier, 0, qualifier == null ? 0 : qualifier.remaining(), ts, type,<a name="line.742"></a>
<span class="sourceLineNo">743</span>        value, 0, value == null ? 0 : value.remaining(), tags);<a name="line.743"></a>
<span class="sourceLineNo">744</span>    this.length = bytes.length;<a name="line.744"></a>
<span class="sourceLineNo">745</span>    this.offset = 0;<a name="line.745"></a>
<span class="sourceLineNo">746</span>  }<a name="line.746"></a>
<span class="sourceLineNo">747</span><a name="line.747"></a>
<span class="sourceLineNo">748</span>  public KeyValue(Cell c) {<a name="line.748"></a>
<span class="sourceLineNo">749</span>    this(c.getRowArray(), c.getRowOffset(), c.getRowLength(),<a name="line.749"></a>
<span class="sourceLineNo">750</span>        c.getFamilyArray(), c.getFamilyOffset(), c.getFamilyLength(),<a name="line.750"></a>
<span class="sourceLineNo">751</span>        c.getQualifierArray(), c.getQualifierOffset(), c.getQualifierLength(),<a name="line.751"></a>
<span class="sourceLineNo">752</span>        c.getTimestamp(), Type.codeToType(c.getTypeByte()), c.getValueArray(), c.getValueOffset(),<a name="line.752"></a>
<span class="sourceLineNo">753</span>        c.getValueLength(), c.getTagsArray(), c.getTagsOffset(), c.getTagsLength());<a name="line.753"></a>
<span class="sourceLineNo">754</span>    this.seqId = c.getSequenceId();<a name="line.754"></a>
<span class="sourceLineNo">755</span>  }<a name="line.755"></a>
<span class="sourceLineNo">756</span><a name="line.756"></a>
<span class="sourceLineNo">757</span>  /**<a name="line.757"></a>
<span class="sourceLineNo">758</span>   * Create an empty byte[] representing a KeyValue<a name="line.758"></a>
<span class="sourceLineNo">759</span>   * All lengths are preset and can be filled in later.<a name="line.759"></a>
<span class="sourceLineNo">760</span>   * @param rlength<a name="line.760"></a>
<span class="sourceLineNo">761</span>   * @param flength<a name="line.761"></a>
<span class="sourceLineNo">762</span>   * @param qlength<a name="line.762"></a>
<span class="sourceLineNo">763</span>   * @param timestamp<a name="line.763"></a>
<span class="sourceLineNo">764</span>   * @param type<a name="line.764"></a>
<span class="sourceLineNo">765</span>   * @param vlength<a name="line.765"></a>
<span class="sourceLineNo">766</span>   * @return The newly created byte array.<a name="line.766"></a>
<span class="sourceLineNo">767</span>   */<a name="line.767"></a>
<span class="sourceLineNo">768</span>  private static byte[] createEmptyByteArray(final int rlength, int flength,<a name="line.768"></a>
<span class="sourceLineNo">769</span>      int qlength, final long timestamp, final Type type, int vlength, int tagsLength) {<a name="line.769"></a>
<span class="sourceLineNo">770</span>    if (rlength &gt; Short.MAX_VALUE) {<a name="line.770"></a>
<span class="sourceLineNo">771</span>      throw new IllegalArgumentException("Row &gt; " + Short.MAX_VALUE);<a name="line.771"></a>
<span class="sourceLineNo">772</span>    }<a name="line.772"></a>
<span class="sourceLineNo">773</span>    if (flength &gt; Byte.MAX_VALUE) {<a name="line.773"></a>
<span class="sourceLineNo">774</span>      throw new IllegalArgumentException("Family &gt; " + Byte.MAX_VALUE);<a name="line.774"></a>
<span class="sourceLineNo">775</span>    }<a name="line.775"></a>
<span class="sourceLineNo">776</span>    // Qualifier length<a name="line.776"></a>
<span class="sourceLineNo">777</span>    if (qlength &gt; Integer.MAX_VALUE - rlength - flength) {<a name="line.777"></a>
<span class="sourceLineNo">778</span>      throw new IllegalArgumentException("Qualifier &gt; " + Integer.MAX_VALUE);<a name="line.778"></a>
<span class="sourceLineNo">779</span>    }<a name="line.779"></a>
<span class="sourceLineNo">780</span>    RawCell.checkForTagsLength(tagsLength);<a name="line.780"></a>
<span class="sourceLineNo">781</span>    // Key length<a name="line.781"></a>
<span class="sourceLineNo">782</span>    long longkeylength = getKeyDataStructureSize(rlength, flength, qlength);<a name="line.782"></a>
<span class="sourceLineNo">783</span>    if (longkeylength &gt; Integer.MAX_VALUE) {<a name="line.783"></a>
<span class="sourceLineNo">784</span>      throw new IllegalArgumentException("keylength " + longkeylength + " &gt; " +<a name="line.784"></a>
<span class="sourceLineNo">785</span>        Integer.MAX_VALUE);<a name="line.785"></a>
<span class="sourceLineNo">786</span>    }<a name="line.786"></a>
<span class="sourceLineNo">787</span>    int keylength = (int)longkeylength;<a name="line.787"></a>
<span class="sourceLineNo">788</span>    // Value length<a name="line.788"></a>
<span class="sourceLineNo">789</span>    if (vlength &gt; HConstants.MAXIMUM_VALUE_LENGTH) { // FindBugs INT_VACUOUS_COMPARISON<a name="line.789"></a>
<span class="sourceLineNo">790</span>      throw new IllegalArgumentException("Valuer &gt; " +<a name="line.790"></a>
<span class="sourceLineNo">791</span>          HConstants.MAXIMUM_VALUE_LENGTH);<a name="line.791"></a>
<span class="sourceLineNo">792</span>    }<a name="line.792"></a>
<span class="sourceLineNo">793</span><a name="line.793"></a>
<span class="sourceLineNo">794</span>    // Allocate right-sized byte array.<a name="line.794"></a>
<span class="sourceLineNo">795</span>    byte[] bytes= new byte[(int) getKeyValueDataStructureSize(rlength, flength, qlength, vlength,<a name="line.795"></a>
<span class="sourceLineNo">796</span>        tagsLength)];<a name="line.796"></a>
<span class="sourceLineNo">797</span>    // Write the correct size markers<a name="line.797"></a>
<span class="sourceLineNo">798</span>    int pos = 0;<a name="line.798"></a>
<span class="sourceLineNo">799</span>    pos = Bytes.putInt(bytes, pos, keylength);<a name="line.799"></a>
<span class="sourceLineNo">800</span>    pos = Bytes.putInt(bytes, pos, vlength);<a name="line.800"></a>
<span class="sourceLineNo">801</span>    pos = Bytes.putShort(bytes, pos, (short)(rlength &amp; 0x0000ffff));<a name="line.801"></a>
<span class="sourceLineNo">802</span>    pos += rlength;<a name="line.802"></a>
<span class="sourceLineNo">803</span>    pos = Bytes.putByte(bytes, pos, (byte)(flength &amp; 0x0000ff));<a name="line.803"></a>
<span class="sourceLineNo">804</span>    pos += flength + qlength;<a name="line.804"></a>
<span class="sourceLineNo">805</span>    pos = Bytes.putLong(bytes, pos, timestamp);<a name="line.805"></a>
<span class="sourceLineNo">806</span>    pos = Bytes.putByte(bytes, pos, type.getCode());<a name="line.806"></a>
<span class="sourceLineNo">807</span>    pos += vlength;<a name="line.807"></a>
<span class="sourceLineNo">808</span>    if (tagsLength &gt; 0) {<a name="line.808"></a>
<span class="sourceLineNo">809</span>      pos = Bytes.putAsShort(bytes, pos, tagsLength);<a name="line.809"></a>
<span class="sourceLineNo">810</span>    }<a name="line.810"></a>
<span class="sourceLineNo">811</span>    return bytes;<a name="line.811"></a>
<span class="sourceLineNo">812</span>  }<a name="line.812"></a>
<span class="sourceLineNo">813</span><a name="line.813"></a>
<span class="sourceLineNo">814</span>  /**<a name="line.814"></a>
<span class="sourceLineNo">815</span>   * Checks the parameters passed to a constructor.<a name="line.815"></a>
<span class="sourceLineNo">816</span>   *<a name="line.816"></a>
<span class="sourceLineNo">817</span>   * @param row row key<a name="line.817"></a>
<span class="sourceLineNo">818</span>   * @param rlength row length<a name="line.818"></a>
<span class="sourceLineNo">819</span>   * @param family family name<a name="line.819"></a>
<span class="sourceLineNo">820</span>   * @param flength family length<a name="line.820"></a>
<span class="sourceLineNo">821</span>   * @param qlength qualifier length<a name="line.821"></a>
<span class="sourceLineNo">822</span>   * @param vlength value length<a name="line.822"></a>
<span class="sourceLineNo">823</span>   *<a name="line.823"></a>
<span class="sourceLineNo">824</span>   * @throws IllegalArgumentException an illegal value was passed<a name="line.824"></a>
<span class="sourceLineNo">825</span>   */<a name="line.825"></a>
<span class="sourceLineNo">826</span>  static void checkParameters(final byte [] row, final int rlength,<a name="line.826"></a>
<span class="sourceLineNo">827</span>      final byte [] family, int flength, int qlength, int vlength)<a name="line.827"></a>
<span class="sourceLineNo">828</span>          throws IllegalArgumentException {<a name="line.828"></a>
<span class="sourceLineNo">829</span>    if (rlength &gt; Short.MAX_VALUE) {<a name="line.829"></a>
<span class="sourceLineNo">830</span>      throw new IllegalArgumentException("Row &gt; " + Short.MAX_VALUE);<a name="line.830"></a>
<span class="sourceLineNo">831</span>    }<a name="line.831"></a>
<span class="sourceLineNo">832</span>    if (row == null) {<a name="line.832"></a>
<span class="sourceLineNo">833</span>      throw new IllegalArgumentException("Row is null");<a name="line.833"></a>
<span class="sourceLineNo">834</span>    }<a name="line.834"></a>
<span class="sourceLineNo">835</span>    // Family length<a name="line.835"></a>
<span class="sourceLineNo">836</span>    flength = family == null ? 0 : flength;<a name="line.836"></a>
<span class="sourceLineNo">837</span>    if (flength &gt; Byte.MAX_VALUE) {<a name="line.837"></a>
<span class="sourceLineNo">838</span>      throw new IllegalArgumentException("Family &gt; " + Byte.MAX_VALUE);<a name="line.838"></a>
<span class="sourceLineNo">839</span>    }<a name="line.839"></a>
<span class="sourceLineNo">840</span>    // Qualifier length<a name="line.840"></a>
<span class="sourceLineNo">841</span>    if (qlength &gt; Integer.MAX_VALUE - rlength - flength) {<a name="line.841"></a>
<span class="sourceLineNo">842</span>      throw new IllegalArgumentException("Qualifier &gt; " + Integer.MAX_VALUE);<a name="line.842"></a>
<span class="sourceLineNo">843</span>    }<a name="line.843"></a>
<span class="sourceLineNo">844</span>    // Key length<a name="line.844"></a>
<span class="sourceLineNo">845</span>    long longKeyLength = getKeyDataStructureSize(rlength, flength, qlength);<a name="line.845"></a>
<span class="sourceLineNo">846</span>    if (longKeyLength &gt; Integer.MAX_VALUE) {<a name="line.846"></a>
<span class="sourceLineNo">847</span>      throw new IllegalArgumentException("keylength " + longKeyLength + " &gt; " +<a name="line.847"></a>
<span class="sourceLineNo">848</span>          Integer.MAX_VALUE);<a name="line.848"></a>
<span class="sourceLineNo">849</span>    }<a name="line.849"></a>
<span class="sourceLineNo">850</span>    // Value length<a name="line.850"></a>
<span class="sourceLineNo">851</span>    if (vlength &gt; HConstants.MAXIMUM_VALUE_LENGTH) { // FindBugs INT_VACUOUS_COMPARISON<a name="line.851"></a>
<span class="sourceLineNo">852</span>      throw new IllegalArgumentException("Value length " + vlength + " &gt; " +<a name="line.852"></a>
<span class="sourceLineNo">853</span>          HConstants.MAXIMUM_VALUE_LENGTH);<a name="line.853"></a>
<span class="sourceLineNo">854</span>    }<a name="line.854"></a>
<span class="sourceLineNo">855</span>  }<a name="line.855"></a>
<span class="sourceLineNo">856</span><a name="line.856"></a>
<span class="sourceLineNo">857</span>  /**<a name="line.857"></a>
<span class="sourceLineNo">858</span>   * Write KeyValue format into the provided byte array.<a name="line.858"></a>
<span class="sourceLineNo">859</span>   *<a name="line.859"></a>
<span class="sourceLineNo">860</span>   * @param buffer the bytes buffer to use<a name="line.860"></a>
<span class="sourceLineNo">861</span>   * @param boffset buffer offset<a name="line.861"></a>
<span class="sourceLineNo">862</span>   * @param row row key<a name="line.862"></a>
<span class="sourceLineNo">863</span>   * @param roffset row offset<a name="line.863"></a>
<span class="sourceLineNo">864</span>   * @param rlength row length<a name="line.864"></a>
<span class="sourceLineNo">865</span>   * @param family family name<a name="line.865"></a>
<span class="sourceLineNo">866</span>   * @param foffset family offset<a name="line.866"></a>
<span class="sourceLineNo">867</span>   * @param flength family length<a name="line.867"></a>
<span class="sourceLineNo">868</span>   * @param qualifier column qualifier<a name="line.868"></a>
<span class="sourceLineNo">869</span>   * @param qoffset qualifier offset<a name="line.869"></a>
<span class="sourceLineNo">870</span>   * @param qlength qualifier length<a name="line.870"></a>
<span class="sourceLineNo">871</span>   * @param timestamp version timestamp<a name="line.871"></a>
<span class="sourceLineNo">872</span>   * @param type key type<a name="line.872"></a>
<span class="sourceLineNo">873</span>   * @param value column value<a name="line.873"></a>
<span class="sourceLineNo">874</span>   * @param voffset value offset<a name="line.874"></a>
<span class="sourceLineNo">875</span>   * @param vlength value length<a name="line.875"></a>
<span class="sourceLineNo">876</span>   *<a name="line.876"></a>
<span class="sourceLineNo">877</span>   * @return The number of useful bytes in the buffer.<a name="line.877"></a>
<span class="sourceLineNo">878</span>   *<a name="line.878"></a>
<span class="sourceLineNo">879</span>   * @throws IllegalArgumentException an illegal value was passed or there is insufficient space<a name="line.879"></a>
<span class="sourceLineNo">880</span>   * remaining in the buffer<a name="line.880"></a>
<span class="sourceLineNo">881</span>   */<a name="line.881"></a>
<span class="sourceLineNo">882</span>  public static int writeByteArray(byte [] buffer, final int boffset,<a name="line.882"></a>
<span class="sourceLineNo">883</span>      final byte [] row, final int roffset, final int rlength,<a name="line.883"></a>
<span class="sourceLineNo">884</span>      final byte [] family, final int foffset, int flength,<a name="line.884"></a>
<span class="sourceLineNo">885</span>      final byte [] qualifier, final int qoffset, int qlength,<a name="line.885"></a>
<span class="sourceLineNo">886</span>      final long timestamp, final Type type,<a name="line.886"></a>
<span class="sourceLineNo">887</span>      final byte [] value, final int voffset, int vlength, Tag[] tags) {<a name="line.887"></a>
<span class="sourceLineNo">888</span><a name="line.888"></a>
<span class="sourceLineNo">889</span>    checkParameters(row, rlength, family, flength, qlength, vlength);<a name="line.889"></a>
<span class="sourceLineNo">890</span><a name="line.890"></a>
<span class="sourceLineNo">891</span>    // Calculate length of tags area<a name="line.891"></a>
<span class="sourceLineNo">892</span>    int tagsLength = 0;<a name="line.892"></a>
<span class="sourceLineNo">893</span>    if (tags != null &amp;&amp; tags.length &gt; 0) {<a name="line.893"></a>
<span class="sourceLineNo">894</span>      for (Tag t: tags) {<a name="line.894"></a>
<span class="sourceLineNo">895</span>        tagsLength += t.getValueLength() + Tag.INFRASTRUCTURE_SIZE;<a name="line.895"></a>
<span class="sourceLineNo">896</span>      }<a name="line.896"></a>
<span class="sourceLineNo">897</span>    }<a name="line.897"></a>
<span class="sourceLineNo">898</span>    RawCell.checkForTagsLength(tagsLength);<a name="line.898"></a>
<span class="sourceLineNo">899</span>    int keyLength = (int) getKeyDataStructureSize(rlength, flength, qlength);<a name="line.899"></a>
<span class="sourceLineNo">900</span>    int keyValueLength = (int) getKeyValueDataStructureSize(rlength, flength, qlength, vlength,<a name="line.900"></a>
<span class="sourceLineNo">901</span>        tagsLength);<a name="line.901"></a>
<span class="sourceLineNo">902</span>    if (keyValueLength &gt; buffer.length - boffset) {<a name="line.902"></a>
<span class="sourceLineNo">903</span>      throw new IllegalArgumentException("Buffer size " + (buffer.length - boffset) + " &lt; " +<a name="line.903"></a>
<span class="sourceLineNo">904</span>          keyValueLength);<a name="line.904"></a>
<span class="sourceLineNo">905</span>    }<a name="line.905"></a>
<span class="sourceLineNo">906</span><a name="line.906"></a>
<span class="sourceLineNo">907</span>    // Write key, value and key row length.<a name="line.907"></a>
<span class="sourceLineNo">908</span>    int pos = boffset;<a name="line.908"></a>
<span class="sourceLineNo">909</span>    pos = Bytes.putInt(buffer, pos, keyLength);<a name="line.909"></a>
<span class="sourceLineNo">910</span>    pos = Bytes.putInt(buffer, pos, vlength);<a name="line.910"></a>
<span class="sourceLineNo">911</span>    pos = Bytes.putShort(buffer, pos, (short)(rlength &amp; 0x0000ffff));<a name="line.911"></a>
<span class="sourceLineNo">912</span>    pos = Bytes.putBytes(buffer, pos, row, roffset, rlength);<a name="line.912"></a>
<span class="sourceLineNo">913</span>    pos = Bytes.putByte(buffer, pos, (byte) (flength &amp; 0x0000ff));<a name="line.913"></a>
<span class="sourceLineNo">914</span>    if (flength != 0) {<a name="line.914"></a>
<span class="sourceLineNo">915</span>      pos = Bytes.putBytes(buffer, pos, family, foffset, flength);<a name="line.915"></a>
<span class="sourceLineNo">916</span>    }<a name="line.916"></a>
<span class="sourceLineNo">917</span>    if (qlength != 0) {<a name="line.917"></a>
<span class="sourceLineNo">918</span>      pos = Bytes.putBytes(buffer, pos, qualifier, qoffset, qlength);<a name="line.918"></a>
<span class="sourceLineNo">919</span>    }<a name="line.919"></a>
<span class="sourceLineNo">920</span>    pos = Bytes.putLong(buffer, pos, timestamp);<a name="line.920"></a>
<span class="sourceLineNo">921</span>    pos = Bytes.putByte(buffer, pos, type.getCode());<a name="line.921"></a>
<span class="sourceLineNo">922</span>    if (value != null &amp;&amp; value.length &gt; 0) {<a name="line.922"></a>
<span class="sourceLineNo">923</span>      pos = Bytes.putBytes(buffer, pos, value, voffset, vlength);<a name="line.923"></a>
<span class="sourceLineNo">924</span>    }<a name="line.924"></a>
<span class="sourceLineNo">925</span>    // Write the number of tags. If it is 0 then it means there are no tags.<a name="line.925"></a>
<span class="sourceLineNo">926</span>    if (tagsLength &gt; 0) {<a name="line.926"></a>
<span class="sourceLineNo">927</span>      pos = Bytes.putAsShort(buffer, pos, tagsLength);<a name="line.927"></a>
<span class="sourceLineNo">928</span>      for (Tag t : tags) {<a name="line.928"></a>
<span class="sourceLineNo">929</span>        int tlen = t.getValueLength();<a name="line.929"></a>
<span class="sourceLineNo">930</span>        pos = Bytes.putAsShort(buffer, pos, tlen + Tag.TYPE_LENGTH_SIZE);<a name="line.930"></a>
<span class="sourceLineNo">931</span>        pos = Bytes.putByte(buffer, pos, t.getType());<a name="line.931"></a>
<span class="sourceLineNo">932</span>        Tag.copyValueTo(t, buffer, pos);<a name="line.932"></a>
<span class="sourceLineNo">933</span>        pos += tlen;<a name="line.933"></a>
<span class="sourceLineNo">934</span>      }<a name="line.934"></a>
<span class="sourceLineNo">935</span>    }<a name="line.935"></a>
<span class="sourceLineNo">936</span>    return keyValueLength;<a name="line.936"></a>
<span class="sourceLineNo">937</span>  }<a name="line.937"></a>
<span class="sourceLineNo">938</span><a name="line.938"></a>
<span class="sourceLineNo">939</span>  /**<a name="line.939"></a>
<span class="sourceLineNo">940</span>   * Write KeyValue format into a byte array.<a name="line.940"></a>
<span class="sourceLineNo">941</span>   * @param row row key<a name="line.941"></a>
<span class="sourceLineNo">942</span>   * @param roffset row offset<a name="line.942"></a>
<span class="sourceLineNo">943</span>   * @param rlength row length<a name="line.943"></a>
<span class="sourceLineNo">944</span>   * @param family family name<a name="line.944"></a>
<span class="sourceLineNo">945</span>   * @param foffset family offset<a name="line.945"></a>
<span class="sourceLineNo">946</span>   * @param flength family length<a name="line.946"></a>
<span class="sourceLineNo">947</span>   * @param qualifier column qualifier<a name="line.947"></a>
<span class="sourceLineNo">948</span>   * @param qoffset qualifier offset<a name="line.948"></a>
<span class="sourceLineNo">949</span>   * @param qlength qualifier length<a name="line.949"></a>
<span class="sourceLineNo">950</span>   * @param timestamp version timestamp<a name="line.950"></a>
<span class="sourceLineNo">951</span>   * @param type key type<a name="line.951"></a>
<span class="sourceLineNo">952</span>   * @param value column value<a name="line.952"></a>
<span class="sourceLineNo">953</span>   * @param voffset value offset<a name="line.953"></a>
<span class="sourceLineNo">954</span>   * @param vlength value length<a name="line.954"></a>
<span class="sourceLineNo">955</span>   * @return The newly created byte array.<a name="line.955"></a>
<span class="sourceLineNo">956</span>   */<a name="line.956"></a>
<span class="sourceLineNo">957</span>  private static byte [] createByteArray(final byte [] row, final int roffset,<a name="line.957"></a>
<span class="sourceLineNo">958</span>      final int rlength, final byte [] family, final int foffset, int flength,<a name="line.958"></a>
<span class="sourceLineNo">959</span>      final byte [] qualifier, final int qoffset, int qlength,<a name="line.959"></a>
<span class="sourceLineNo">960</span>      final long timestamp, final Type type,<a name="line.960"></a>
<span class="sourceLineNo">961</span>      final byte [] value, final int voffset,<a name="line.961"></a>
<span class="sourceLineNo">962</span>      int vlength, byte[] tags, int tagsOffset, int tagsLength) {<a name="line.962"></a>
<span class="sourceLineNo">963</span><a name="line.963"></a>
<span class="sourceLineNo">964</span>    checkParameters(row, rlength, family, flength, qlength, vlength);<a name="line.964"></a>
<span class="sourceLineNo">965</span>    RawCell.checkForTagsLength(tagsLength);<a name="line.965"></a>
<span class="sourceLineNo">966</span>    // Allocate right-sized byte array.<a name="line.966"></a>
<span class="sourceLineNo">967</span>    int keyLength = (int) getKeyDataStructureSize(rlength, flength, qlength);<a name="line.967"></a>
<span class="sourceLineNo">968</span>    byte[] bytes = new byte[(int) getKeyValueDataStructureSize(rlength, flength, qlength, vlength,<a name="line.968"></a>
<span class="sourceLineNo">969</span>      tagsLength)];<a name="line.969"></a>
<span class="sourceLineNo">970</span>    // Write key, value and key row length.<a name="line.970"></a>
<span class="sourceLineNo">971</span>    int pos = 0;<a name="line.971"></a>
<span class="sourceLineNo">972</span>    pos = Bytes.putInt(bytes, pos, keyLength);<a name="line.972"></a>
<span class="sourceLineNo">973</span>    pos = Bytes.putInt(bytes, pos, vlength);<a name="line.973"></a>
<span class="sourceLineNo">974</span>    pos = Bytes.putShort(bytes, pos, (short)(rlength &amp; 0x0000ffff));<a name="line.974"></a>
<span class="sourceLineNo">975</span>    pos = Bytes.putBytes(bytes, pos, row, roffset, rlength);<a name="line.975"></a>
<span class="sourceLineNo">976</span>    pos = Bytes.putByte(bytes, pos, (byte)(flength &amp; 0x0000ff));<a name="line.976"></a>
<span class="sourceLineNo">977</span>    if(flength != 0) {<a name="line.977"></a>
<span class="sourceLineNo">978</span>      pos = Bytes.putBytes(bytes, pos, family, foffset, flength);<a name="line.978"></a>
<span class="sourceLineNo">979</span>    }<a name="line.979"></a>
<span class="sourceLineNo">980</span>    if(qlength != 0) {<a name="line.980"></a>
<span class="sourceLineNo">981</span>      pos = Bytes.putBytes(bytes, pos, qualifier, qoffset, qlength);<a name="line.981"></a>
<span class="sourceLineNo">982</span>    }<a name="line.982"></a>
<span class="sourceLineNo">983</span>    pos = Bytes.putLong(bytes, pos, timestamp);<a name="line.983"></a>
<span class="sourceLineNo">984</span>    pos = Bytes.putByte(bytes, pos, type.getCode());<a name="line.984"></a>
<span class="sourceLineNo">985</span>    if (value != null &amp;&amp; value.length &gt; 0) {<a name="line.985"></a>
<span class="sourceLineNo">986</span>      pos = Bytes.putBytes(bytes, pos, value, voffset, vlength);<a name="line.986"></a>
<span class="sourceLineNo">987</span>    }<a name="line.987"></a>
<span class="sourceLineNo">988</span>    // Add the tags after the value part<a name="line.988"></a>
<span class="sourceLineNo">989</span>    if (tagsLength &gt; 0) {<a name="line.989"></a>
<span class="sourceLineNo">990</span>      pos = Bytes.putAsShort(bytes, pos, tagsLength);<a name="line.990"></a>
<span class="sourceLineNo">991</span>      pos = Bytes.putBytes(bytes, pos, tags, tagsOffset, tagsLength);<a name="line.991"></a>
<span class="sourceLineNo">992</span>    }<a name="line.992"></a>
<span class="sourceLineNo">993</span>    return bytes;<a name="line.993"></a>
<span class="sourceLineNo">994</span>  }<a name="line.994"></a>
<span class="sourceLineNo">995</span><a name="line.995"></a>
<span class="sourceLineNo">996</span>  /**<a name="line.996"></a>
<span class="sourceLineNo">997</span>   * @param qualifier can be a ByteBuffer or a byte[], or null.<a name="line.997"></a>
<span class="sourceLineNo">998</span>   * @param value can be a ByteBuffer or a byte[], or null.<a name="line.998"></a>
<span class="sourceLineNo">999</span>   */<a name="line.999"></a>
<span class="sourceLineNo">1000</span>  private static byte [] createByteArray(final byte [] row, final int roffset,<a name="line.1000"></a>
<span class="sourceLineNo">1001</span>      final int rlength, final byte [] family, final int foffset, int flength,<a name="line.1001"></a>
<span class="sourceLineNo">1002</span>      final Object qualifier, final int qoffset, int qlength,<a name="line.1002"></a>
<span class="sourceLineNo">1003</span>      final long timestamp, final Type type,<a name="line.1003"></a>
<span class="sourceLineNo">1004</span>      final Object value, final int voffset, int vlength, List&lt;Tag&gt; tags) {<a name="line.1004"></a>
<span class="sourceLineNo">1005</span><a name="line.1005"></a>
<span class="sourceLineNo">1006</span>    checkParameters(row, rlength, family, flength, qlength, vlength);<a name="line.1006"></a>
<span class="sourceLineNo">1007</span><a name="line.1007"></a>
<span class="sourceLineNo">1008</span>    // Calculate length of tags area<a name="line.1008"></a>
<span class="sourceLineNo">1009</span>    int tagsLength = 0;<a name="line.1009"></a>
<span class="sourceLineNo">1010</span>    if (tags != null &amp;&amp; !tags.isEmpty()) {<a name="line.1010"></a>
<span class="sourceLineNo">1011</span>      for (Tag t : tags) {<a name="line.1011"></a>
<span class="sourceLineNo">1012</span>        tagsLength += t.getValueLength() + Tag.INFRASTRUCTURE_SIZE;<a name="line.1012"></a>
<span class="sourceLineNo">1013</span>      }<a name="line.1013"></a>
<span class="sourceLineNo">1014</span>    }<a name="line.1014"></a>
<span class="sourceLineNo">1015</span>    RawCell.checkForTagsLength(tagsLength);<a name="line.1015"></a>
<span class="sourceLineNo">1016</span>    // Allocate right-sized byte array.<a name="line.1016"></a>
<span class="sourceLineNo">1017</span>    int keyLength = (int) getKeyDataStructureSize(rlength, flength, qlength);<a name="line.1017"></a>
<span class="sourceLineNo">1018</span>    byte[] bytes = new byte[(int) getKeyValueDataStructureSize(rlength, flength, qlength, vlength,<a name="line.1018"></a>
<span class="sourceLineNo">1019</span>        tagsLength)];<a name="line.1019"></a>
<span class="sourceLineNo">1020</span><a name="line.1020"></a>
<span class="sourceLineNo">1021</span>    // Write key, value and key row length.<a name="line.1021"></a>
<span class="sourceLineNo">1022</span>    int pos = 0;<a name="line.1022"></a>
<span class="sourceLineNo">1023</span>    pos = Bytes.putInt(bytes, pos, keyLength);<a name="line.1023"></a>
<span class="sourceLineNo">1024</span><a name="line.1024"></a>
<span class="sourceLineNo">1025</span>    pos = Bytes.putInt(bytes, pos, vlength);<a name="line.1025"></a>
<span class="sourceLineNo">1026</span>    pos = Bytes.putShort(bytes, pos, (short)(rlength &amp; 0x0000ffff));<a name="line.1026"></a>
<span class="sourceLineNo">1027</span>    pos = Bytes.putBytes(bytes, pos, row, roffset, rlength);<a name="line.1027"></a>
<span class="sourceLineNo">1028</span>    pos = Bytes.putByte(bytes, pos, (byte)(flength &amp; 0x0000ff));<a name="line.1028"></a>
<span class="sourceLineNo">1029</span>    if(flength != 0) {<a name="line.1029"></a>
<span class="sourceLineNo">1030</span>      pos = Bytes.putBytes(bytes, pos, family, foffset, flength);<a name="line.1030"></a>
<span class="sourceLineNo">1031</span>    }<a name="line.1031"></a>
<span class="sourceLineNo">1032</span>    if (qlength &gt; 0) {<a name="line.1032"></a>
<span class="sourceLineNo">1033</span>      if (qualifier instanceof ByteBuffer) {<a name="line.1033"></a>
<span class="sourceLineNo">1034</span>        pos = Bytes.putByteBuffer(bytes, pos, (ByteBuffer) qualifier);<a name="line.1034"></a>
<span class="sourceLineNo">1035</span>      } else {<a name="line.1035"></a>
<span class="sourceLineNo">1036</span>        pos = Bytes.putBytes(bytes, pos, (byte[]) qualifier, qoffset, qlength);<a name="line.1036"></a>
<span class="sourceLineNo">1037</span>      }<a name="line.1037"></a>
<span class="sourceLineNo">1038</span>    }<a name="line.1038"></a>
<span class="sourceLineNo">1039</span>    pos = Bytes.putLong(bytes, pos, timestamp);<a name="line.1039"></a>
<span class="sourceLineNo">1040</span>    pos = Bytes.putByte(bytes, pos, type.getCode());<a name="line.1040"></a>
<span class="sourceLineNo">1041</span>    if (vlength &gt; 0) {<a name="line.1041"></a>
<span class="sourceLineNo">1042</span>      if (value instanceof ByteBuffer) {<a name="line.1042"></a>
<span class="sourceLineNo">1043</span>        pos = Bytes.putByteBuffer(bytes, pos, (ByteBuffer) value);<a name="line.1043"></a>
<span class="sourceLineNo">1044</span>      } else {<a name="line.1044"></a>
<span class="sourceLineNo">1045</span>        pos = Bytes.putBytes(bytes, pos, (byte[]) value, voffset, vlength);<a name="line.1045"></a>
<span class="sourceLineNo">1046</span>      }<a name="line.1046"></a>
<span class="sourceLineNo">1047</span>    }<a name="line.1047"></a>
<span class="sourceLineNo">1048</span>    // Add the tags after the value part<a name="line.1048"></a>
<span class="sourceLineNo">1049</span>    if (tagsLength &gt; 0) {<a name="line.1049"></a>
<span class="sourceLineNo">1050</span>      pos = Bytes.putAsShort(bytes, pos, tagsLength);<a name="line.1050"></a>
<span class="sourceLineNo">1051</span>      for (Tag t : tags) {<a name="line.1051"></a>
<span class="sourceLineNo">1052</span>        int tlen = t.getValueLength();<a name="line.1052"></a>
<span class="sourceLineNo">1053</span>        pos = Bytes.putAsShort(bytes, pos, tlen + Tag.TYPE_LENGTH_SIZE);<a name="line.1053"></a>
<span class="sourceLineNo">1054</span>        pos = Bytes.putByte(bytes, pos, t.getType());<a name="line.1054"></a>
<span class="sourceLineNo">1055</span>        Tag.copyValueTo(t, bytes, pos);<a name="line.1055"></a>
<span class="sourceLineNo">1056</span>        pos += tlen;<a name="line.1056"></a>
<span class="sourceLineNo">1057</span>      }<a name="line.1057"></a>
<span class="sourceLineNo">1058</span>    }<a name="line.1058"></a>
<span class="sourceLineNo">1059</span>    return bytes;<a name="line.1059"></a>
<span class="sourceLineNo">1060</span>  }<a name="line.1060"></a>
<span class="sourceLineNo">1061</span><a name="line.1061"></a>
<span class="sourceLineNo">1062</span>  /**<a name="line.1062"></a>
<span class="sourceLineNo">1063</span>   * Needed doing 'contains' on List.  Only compares the key portion, not the value.<a name="line.1063"></a>
<span class="sourceLineNo">1064</span>   */<a name="line.1064"></a>
<span class="sourceLineNo">1065</span>  @Override<a name="line.1065"></a>
<span class="sourceLineNo">1066</span>  public boolean equals(Object other) {<a name="line.1066"></a>
<span class="sourceLineNo">1067</span>    if (!(other instanceof Cell)) {<a name="line.1067"></a>
<span class="sourceLineNo">1068</span>      return false;<a name="line.1068"></a>
<span class="sourceLineNo">1069</span>    }<a name="line.1069"></a>
<span class="sourceLineNo">1070</span>    return CellUtil.equals(this, (Cell)other);<a name="line.1070"></a>
<span class="sourceLineNo">1071</span>  }<a name="line.1071"></a>
<span class="sourceLineNo">1072</span><a name="line.1072"></a>
<span class="sourceLineNo">1073</span>  /**<a name="line.1073"></a>
<span class="sourceLineNo">1074</span>   * In line with {@link #equals(Object)}, only uses the key portion, not the value.<a name="line.1074"></a>
<span class="sourceLineNo">1075</span>   */<a name="line.1075"></a>
<span class="sourceLineNo">1076</span>  @Override<a name="line.1076"></a>
<span class="sourceLineNo">1077</span>  public int hashCode() {<a name="line.1077"></a>
<span class="sourceLineNo">1078</span>    return calculateHashForKey(this);<a name="line.1078"></a>
<span class="sourceLineNo">1079</span>  }<a name="line.1079"></a>
<span class="sourceLineNo">1080</span><a name="line.1080"></a>
<span class="sourceLineNo">1081</span>  private int calculateHashForKey(Cell cell) {<a name="line.1081"></a>
<span class="sourceLineNo">1082</span>    // pre-calculate the 3 hashes made of byte ranges<a name="line.1082"></a>
<span class="sourceLineNo">1083</span>    int rowHash = Bytes.hashCode(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength());<a name="line.1083"></a>
<span class="sourceLineNo">1084</span>    int familyHash = Bytes.hashCode(cell.getFamilyArray(), cell.getFamilyOffset(),<a name="line.1084"></a>
<span class="sourceLineNo">1085</span>        cell.getFamilyLength());<a name="line.1085"></a>
<span class="sourceLineNo">1086</span>    int qualifierHash = Bytes.hashCode(cell.getQualifierArray(), cell.getQualifierOffset(),<a name="line.1086"></a>
<span class="sourceLineNo">1087</span>        cell.getQualifierLength());<a name="line.1087"></a>
<span class="sourceLineNo">1088</span><a name="line.1088"></a>
<span class="sourceLineNo">1089</span>    // combine the 6 sub-hashes<a name="line.1089"></a>
<span class="sourceLineNo">1090</span>    int hash = 31 * rowHash + familyHash;<a name="line.1090"></a>
<span class="sourceLineNo">1091</span>    hash = 31 * hash + qualifierHash;<a name="line.1091"></a>
<span class="sourceLineNo">1092</span>    hash = 31 * hash + (int) cell.getTimestamp();<a name="line.1092"></a>
<span class="sourceLineNo">1093</span>    hash = 31 * hash + cell.getTypeByte();<a name="line.1093"></a>
<span class="sourceLineNo">1094</span>    return hash;<a name="line.1094"></a>
<span class="sourceLineNo">1095</span>  }<a name="line.1095"></a>
<span class="sourceLineNo">1096</span><a name="line.1096"></a>
<span class="sourceLineNo">1097</span>  //---------------------------------------------------------------------------<a name="line.1097"></a>
<span class="sourceLineNo">1098</span>  //<a name="line.1098"></a>
<span class="sourceLineNo">1099</span>  //  KeyValue cloning<a name="line.1099"></a>
<span class="sourceLineNo">1100</span>  //<a name="line.1100"></a>
<span class="sourceLineNo">1101</span>  //---------------------------------------------------------------------------<a name="line.1101"></a>
<span class="sourceLineNo">1102</span><a name="line.1102"></a>
<span class="sourceLineNo">1103</span>  /**<a name="line.1103"></a>
<span class="sourceLineNo">1104</span>   * Clones a KeyValue.  This creates a copy, re-allocating the buffer.<a name="line.1104"></a>
<span class="sourceLineNo">1105</span>   * @return Fully copied clone of this KeyValue<a name="line.1105"></a>
<span class="sourceLineNo">1106</span>   * @throws CloneNotSupportedException<a name="line.1106"></a>
<span class="sourceLineNo">1107</span>   */<a name="line.1107"></a>
<span class="sourceLineNo">1108</span>  @Override<a name="line.1108"></a>
<span class="sourceLineNo">1109</span>  public KeyValue clone() throws CloneNotSupportedException {<a name="line.1109"></a>
<span class="sourceLineNo">1110</span>    super.clone();<a name="line.1110"></a>
<span class="sourceLineNo">1111</span>    byte [] b = new byte[this.length];<a name="line.1111"></a>
<span class="sourceLineNo">1112</span>    System.arraycopy(this.bytes, this.offset, b, 0, this.length);<a name="line.1112"></a>
<span class="sourceLineNo">1113</span>    KeyValue ret = new KeyValue(b, 0, b.length);<a name="line.1113"></a>
<span class="sourceLineNo">1114</span>    // Important to clone the memstoreTS as well - otherwise memstore's<a name="line.1114"></a>
<span class="sourceLineNo">1115</span>    // update-in-place methods (eg increment) will end up creating<a name="line.1115"></a>
<span class="sourceLineNo">1116</span>    // new entries<a name="line.1116"></a>
<span class="sourceLineNo">1117</span>    ret.setSequenceId(seqId);<a name="line.1117"></a>
<span class="sourceLineNo">1118</span>    return ret;<a name="line.1118"></a>
<span class="sourceLineNo">1119</span>  }<a name="line.1119"></a>
<span class="sourceLineNo">1120</span><a name="line.1120"></a>
<span class="sourceLineNo">1121</span>  /**<a name="line.1121"></a>
<span class="sourceLineNo">1122</span>   * Creates a shallow copy of this KeyValue, reusing the data byte buffer.<a name="line.1122"></a>
<span class="sourceLineNo">1123</span>   * http://en.wikipedia.org/wiki/Object_copy<a name="line.1123"></a>
<span class="sourceLineNo">1124</span>   * @return Shallow copy of this KeyValue<a name="line.1124"></a>
<span class="sourceLineNo">1125</span>   */<a name="line.1125"></a>
<span class="sourceLineNo">1126</span>  public KeyValue shallowCopy() {<a name="line.1126"></a>
<span class="sourceLineNo">1127</span>    KeyValue shallowCopy = new KeyValue(this.bytes, this.offset, this.length);<a name="line.1127"></a>
<span class="sourceLineNo">1128</span>    shallowCopy.setSequenceId(this.seqId);<a name="line.1128"></a>
<span class="sourceLineNo">1129</span>    return shallowCopy;<a name="line.1129"></a>
<span class="sourceLineNo">1130</span>  }<a name="line.1130"></a>
<span class="sourceLineNo">1131</span><a name="line.1131"></a>
<span class="sourceLineNo">1132</span>  //---------------------------------------------------------------------------<a name="line.1132"></a>
<span class="sourceLineNo">1133</span>  //<a name="line.1133"></a>
<span class="sourceLineNo">1134</span>  //  String representation<a name="line.1134"></a>
<span class="sourceLineNo">1135</span>  //<a name="line.1135"></a>
<span class="sourceLineNo">1136</span>  //---------------------------------------------------------------------------<a name="line.1136"></a>
<span class="sourceLineNo">1137</span><a name="line.1137"></a>
<span class="sourceLineNo">1138</span>  @Override<a name="line.1138"></a>
<span class="sourceLineNo">1139</span>  public String toString() {<a name="line.1139"></a>
<span class="sourceLineNo">1140</span>    if (this.bytes == null || this.bytes.length == 0) {<a name="line.1140"></a>
<span class="sourceLineNo">1141</span>      return "empty";<a name="line.1141"></a>
<span class="sourceLineNo">1142</span>    }<a name="line.1142"></a>
<span class="sourceLineNo">1143</span>    return keyToString(this.bytes, this.offset + ROW_OFFSET, getKeyLength()) + "/vlen="<a name="line.1143"></a>
<span class="sourceLineNo">1144</span>      + getValueLength() + "/seqid=" + seqId;<a name="line.1144"></a>
<span class="sourceLineNo">1145</span>  }<a name="line.1145"></a>
<span class="sourceLineNo">1146</span><a name="line.1146"></a>
<span class="sourceLineNo">1147</span>  /**<a name="line.1147"></a>
<span class="sourceLineNo">1148</span>   * @param k Key portion of a KeyValue.<a name="line.1148"></a>
<span class="sourceLineNo">1149</span>   * @return Key as a String, empty string if k is null.<a name="line.1149"></a>
<span class="sourceLineNo">1150</span>   */<a name="line.1150"></a>
<span class="sourceLineNo">1151</span>  public static String keyToString(final byte [] k) {<a name="line.1151"></a>
<span class="sourceLineNo">1152</span>    if (k == null) {<a name="line.1152"></a>
<span class="sourceLineNo">1153</span>      return "";<a name="line.1153"></a>
<span class="sourceLineNo">1154</span>    }<a name="line.1154"></a>
<span class="sourceLineNo">1155</span>    return keyToString(k, 0, k.length);<a name="line.1155"></a>
<span class="sourceLineNo">1156</span>  }<a name="line.1156"></a>
<span class="sourceLineNo">1157</span><a name="line.1157"></a>
<span class="sourceLineNo">1158</span>  /**<a name="line.1158"></a>
<span class="sourceLineNo">1159</span>   * Produces a string map for this key/value pair. Useful for programmatic use<a name="line.1159"></a>
<span class="sourceLineNo">1160</span>   * and manipulation of the data stored in an WALKey, for example, printing<a name="line.1160"></a>
<span class="sourceLineNo">1161</span>   * as JSON. Values are left out due to their tendency to be large. If needed,<a name="line.1161"></a>
<span class="sourceLineNo">1162</span>   * they can be added manually.<a name="line.1162"></a>
<span class="sourceLineNo">1163</span>   *<a name="line.1163"></a>
<span class="sourceLineNo">1164</span>   * @return the Map&amp;lt;String,?&amp;gt; containing data from this key<a name="line.1164"></a>
<span class="sourceLineNo">1165</span>   */<a name="line.1165"></a>
<span class="sourceLineNo">1166</span>  public Map&lt;String, Object&gt; toStringMap() {<a name="line.1166"></a>
<span class="sourceLineNo">1167</span>    Map&lt;String, Object&gt; stringMap = new HashMap&lt;&gt;();<a name="line.1167"></a>
<span class="sourceLineNo">1168</span>    stringMap.put("row", Bytes.toStringBinary(getRowArray(), getRowOffset(), getRowLength()));<a name="line.1168"></a>
<span class="sourceLineNo">1169</span>    stringMap.put("family",<a name="line.1169"></a>
<span class="sourceLineNo">1170</span>      Bytes.toStringBinary(getFamilyArray(), getFamilyOffset(), getFamilyLength()));<a name="line.1170"></a>
<span class="sourceLineNo">1171</span>    stringMap.put("qualifier",<a name="line.1171"></a>
<span class="sourceLineNo">1172</span>      Bytes.toStringBinary(getQualifierArray(), getQualifierOffset(), getQualifierLength()));<a name="line.1172"></a>
<span class="sourceLineNo">1173</span>    stringMap.put("timestamp", getTimestamp());<a name="line.1173"></a>
<span class="sourceLineNo">1174</span>    stringMap.put("vlen", getValueLength());<a name="line.1174"></a>
<span class="sourceLineNo">1175</span>    Iterator&lt;Tag&gt; tags = getTags();<a name="line.1175"></a>
<span class="sourceLineNo">1176</span>    if (tags != null) {<a name="line.1176"></a>
<span class="sourceLineNo">1177</span>      List&lt;String&gt; tagsString = new ArrayList&lt;String&gt;();<a name="line.1177"></a>
<span class="sourceLineNo">1178</span>      while (tags.hasNext()) {<a name="line.1178"></a>
<span class="sourceLineNo">1179</span>        tagsString.add(tags.next().toString());<a name="line.1179"></a>
<span class="sourceLineNo">1180</span>      }<a name="line.1180"></a>
<span class="sourceLineNo">1181</span>      stringMap.put("tag", tagsString);<a name="line.1181"></a>
<span class="sourceLineNo">1182</span>    }<a name="line.1182"></a>
<span class="sourceLineNo">1183</span>    return stringMap;<a name="line.1183"></a>
<span class="sourceLineNo">1184</span>  }<a name="line.1184"></a>
<span class="sourceLineNo">1185</span><a name="line.1185"></a>
<span class="sourceLineNo">1186</span>  /**<a name="line.1186"></a>
<span class="sourceLineNo">1187</span>   * Use for logging.<a name="line.1187"></a>
<span class="sourceLineNo">1188</span>   * @param b Key portion of a KeyValue.<a name="line.1188"></a>
<span class="sourceLineNo">1189</span>   * @param o Offset to start of key<a name="line.1189"></a>
<span class="sourceLineNo">1190</span>   * @param l Length of key.<a name="line.1190"></a>
<span class="sourceLineNo">1191</span>   * @return Key as a String.<a name="line.1191"></a>
<span class="sourceLineNo">1192</span>   */<a name="line.1192"></a>
<span class="sourceLineNo">1193</span>  public static String keyToString(final byte [] b, final int o, final int l) {<a name="line.1193"></a>
<span class="sourceLineNo">1194</span>    if (b == null) return "";<a name="line.1194"></a>
<span class="sourceLineNo">1195</span>    int rowlength = Bytes.toShort(b, o);<a name="line.1195"></a>
<span class="sourceLineNo">1196</span>    String row = Bytes.toStringBinary(b, o + Bytes.SIZEOF_SHORT, rowlength);<a name="line.1196"></a>
<span class="sourceLineNo">1197</span>    int columnoffset = o + Bytes.SIZEOF_SHORT + 1 + rowlength;<a name="line.1197"></a>
<span class="sourceLineNo">1198</span>    int familylength = b[columnoffset - 1];<a name="line.1198"></a>
<span class="sourceLineNo">1199</span>    int columnlength = l - ((columnoffset - o) + TIMESTAMP_TYPE_SIZE);<a name="line.1199"></a>
<span class="sourceLineNo">1200</span>    String family = familylength == 0? "":<a name="line.1200"></a>
<span class="sourceLineNo">1201</span>      Bytes.toStringBinary(b, columnoffset, familylength);<a name="line.1201"></a>
<span class="sourceLineNo">1202</span>    String qualifier = columnlength == 0? "":<a name="line.1202"></a>
<span class="sourceLineNo">1203</span>      Bytes.toStringBinary(b, columnoffset + familylength,<a name="line.1203"></a>
<span class="sourceLineNo">1204</span>      columnlength - familylength);<a name="line.1204"></a>
<span class="sourceLineNo">1205</span>    long timestamp = Bytes.toLong(b, o + (l - TIMESTAMP_TYPE_SIZE));<a name="line.1205"></a>
<span class="sourceLineNo">1206</span>    String timestampStr = humanReadableTimestamp(timestamp);<a name="line.1206"></a>
<span class="sourceLineNo">1207</span>    byte type = b[o + l - 1];<a name="line.1207"></a>
<span class="sourceLineNo">1208</span>    return row + "/" + family +<a name="line.1208"></a>
<span class="sourceLineNo">1209</span>      (family != null &amp;&amp; family.length() &gt; 0? ":" :"") +<a name="line.1209"></a>
<span class="sourceLineNo">1210</span>      qualifier + "/" + timestampStr + "/" + Type.codeToType(type);<a name="line.1210"></a>
<span class="sourceLineNo">1211</span>  }<a name="line.1211"></a>
<span class="sourceLineNo">1212</span><a name="line.1212"></a>
<span class="sourceLineNo">1213</span>  public static String humanReadableTimestamp(final long timestamp) {<a name="line.1213"></a>
<span class="sourceLineNo">1214</span>    if (timestamp == HConstants.LATEST_TIMESTAMP) {<a name="line.1214"></a>
<span class="sourceLineNo">1215</span>      return "LATEST_TIMESTAMP";<a name="line.1215"></a>
<span class="sourceLineNo">1216</span>    }<a name="line.1216"></a>
<span class="sourceLineNo">1217</span>    if (timestamp == PrivateConstants.OLDEST_TIMESTAMP) {<a name="line.1217"></a>
<span class="sourceLineNo">1218</span>      return "OLDEST_TIMESTAMP";<a name="line.1218"></a>
<span class="sourceLineNo">1219</span>    }<a name="line.1219"></a>
<span class="sourceLineNo">1220</span>    return String.valueOf(timestamp);<a name="line.1220"></a>
<span class="sourceLineNo">1221</span>  }<a name="line.1221"></a>
<span class="sourceLineNo">1222</span><a name="line.1222"></a>
<span class="sourceLineNo">1223</span>  //---------------------------------------------------------------------------<a name="line.1223"></a>
<span class="sourceLineNo">1224</span>  //<a name="line.1224"></a>
<span class="sourceLineNo">1225</span>  //  Public Member Accessors<a name="line.1225"></a>
<span class="sourceLineNo">1226</span>  //<a name="line.1226"></a>
<span class="sourceLineNo">1227</span>  //---------------------------------------------------------------------------<a name="line.1227"></a>
<span class="sourceLineNo">1228</span><a name="line.1228"></a>
<span class="sourceLineNo">1229</span>  /**<a name="line.1229"></a>
<span class="sourceLineNo">1230</span>   * To be used only in tests where the Cells are clearly assumed to be of type KeyValue<a name="line.1230"></a>
<span class="sourceLineNo">1231</span>   * and that we need access to the backing array to do some test case related assertions.<a name="line.1231"></a>
<span class="sourceLineNo">1232</span>   * @return The byte array backing this KeyValue.<a name="line.1232"></a>
<span class="sourceLineNo">1233</span>   */<a name="line.1233"></a>
<span class="sourceLineNo">1234</span>  public byte [] getBuffer() {<a name="line.1234"></a>
<span class="sourceLineNo">1235</span>    return this.bytes;<a name="line.1235"></a>
<span class="sourceLineNo">1236</span>  }<a name="line.1236"></a>
<span class="sourceLineNo">1237</span><a name="line.1237"></a>
<span class="sourceLineNo">1238</span>  /**<a name="line.1238"></a>
<span class="sourceLineNo">1239</span>   * @return Offset into {@link #getBuffer()} at which this KeyValue starts.<a name="line.1239"></a>
<span class="sourceLineNo">1240</span>   */<a name="line.1240"></a>
<span class="sourceLineNo">1241</span>  public int getOffset() {<a name="line.1241"></a>
<span class="sourceLineNo">1242</span>    return this.offset;<a name="line.1242"></a>
<span class="sourceLineNo">1243</span>  }<a name="line.1243"></a>
<span class="sourceLineNo">1244</span><a name="line.1244"></a>
<span class="sourceLineNo">1245</span>  /**<a name="line.1245"></a>
<span class="sourceLineNo">1246</span>   * @return Length of bytes this KeyValue occupies in {@link #getBuffer()}.<a name="line.1246"></a>
<span class="sourceLineNo">1247</span>   */<a name="line.1247"></a>
<span class="sourceLineNo">1248</span>  public int getLength() {<a name="line.1248"></a>
<span class="sourceLineNo">1249</span>    return length;<a name="line.1249"></a>
<span class="sourceLineNo">1250</span>  }<a name="line.1250"></a>
<span class="sourceLineNo">1251</span><a name="line.1251"></a>
<span class="sourceLineNo">1252</span>  //---------------------------------------------------------------------------<a name="line.1252"></a>
<span class="sourceLineNo">1253</span>  //<a name="line.1253"></a>
<span class="sourceLineNo">1254</span>  //  Length and Offset Calculators<a name="line.1254"></a>
<span class="sourceLineNo">1255</span>  //<a name="line.1255"></a>
<span class="sourceLineNo">1256</span>  //---------------------------------------------------------------------------<a name="line.1256"></a>
<span class="sourceLineNo">1257</span><a name="line.1257"></a>
<span class="sourceLineNo">1258</span>  /**<a name="line.1258"></a>
<span class="sourceLineNo">1259</span>   * Determines the total length of the KeyValue stored in the specified<a name="line.1259"></a>
<span class="sourceLineNo">1260</span>   * byte array and offset.  Includes all headers.<a name="line.1260"></a>
<span class="sourceLineNo">1261</span>   * @param bytes byte array<a name="line.1261"></a>
<span class="sourceLineNo">1262</span>   * @param offset offset to start of the KeyValue<a name="line.1262"></a>
<span class="sourceLineNo">1263</span>   * @return length of entire KeyValue, in bytes<a name="line.1263"></a>
<span class="sourceLineNo">1264</span>   */<a name="line.1264"></a>
<span class="sourceLineNo">1265</span>  private static int getLength(byte [] bytes, int offset) {<a name="line.1265"></a>
<span class="sourceLineNo">1266</span>    int klength = ROW_OFFSET + Bytes.toInt(bytes, offset);<a name="line.1266"></a>
<span class="sourceLineNo">1267</span>    int vlength = Bytes.toInt(bytes, offset + Bytes.SIZEOF_INT);<a name="line.1267"></a>
<span class="sourceLineNo">1268</span>    return klength + vlength;<a name="line.1268"></a>
<span class="sourceLineNo">1269</span>  }<a name="line.1269"></a>
<span class="sourceLineNo">1270</span><a name="line.1270"></a>
<span class="sourceLineNo">1271</span>  /**<a name="line.1271"></a>
<span class="sourceLineNo">1272</span>   * @return Key offset in backing buffer..<a name="line.1272"></a>
<span class="sourceLineNo">1273</span>   */<a name="line.1273"></a>
<span class="sourceLineNo">1274</span>  public int getKeyOffset() {<a name="line.1274"></a>
<span class="sourceLineNo">1275</span>    return this.offset + ROW_OFFSET;<a name="line.1275"></a>
<span class="sourceLineNo">1276</span>  }<a name="line.1276"></a>
<span class="sourceLineNo">1277</span><a name="line.1277"></a>
<span class="sourceLineNo">1278</span>  public String getKeyString() {<a name="line.1278"></a>
<span class="sourceLineNo">1279</span>    return Bytes.toStringBinary(getBuffer(), getKeyOffset(), getKeyLength());<a name="line.1279"></a>
<span class="sourceLineNo">1280</span>  }<a name="line.1280"></a>
<span class="sourceLineNo">1281</span><a name="line.1281"></a>
<span class="sourceLineNo">1282</span>  /**<a name="line.1282"></a>
<span class="sourceLineNo">1283</span>   * @return Length of key portion.<a name="line.1283"></a>
<span class="sourceLineNo">1284</span>   */<a name="line.1284"></a>
<span class="sourceLineNo">1285</span>  public int getKeyLength() {<a name="line.1285"></a>
<span class="sourceLineNo">1286</span>    return Bytes.toInt(this.bytes, this.offset);<a name="line.1286"></a>
<span class="sourceLineNo">1287</span>  }<a name="line.1287"></a>
<span class="sourceLineNo">1288</span><a name="line.1288"></a>
<span class="sourceLineNo">1289</span>  /**<a name="line.1289"></a>
<span class="sourceLineNo">1290</span>   * @return the backing array of the entire KeyValue (all KeyValue fields are in a single array)<a name="line.1290"></a>
<span class="sourceLineNo">1291</span>   */<a name="line.1291"></a>
<span class="sourceLineNo">1292</span>  @Override<a name="line.1292"></a>
<span class="sourceLineNo">1293</span>  public byte[] getValueArray() {<a name="line.1293"></a>
<span class="sourceLineNo">1294</span>    return bytes;<a name="line.1294"></a>
<span class="sourceLineNo">1295</span>  }<a name="line.1295"></a>
<span class="sourceLineNo">1296</span><a name="line.1296"></a>
<span class="sourceLineNo">1297</span>  /**<a name="line.1297"></a>
<span class="sourceLineNo">1298</span>   * @return the value offset<a name="line.1298"></a>
<span class="sourceLineNo">1299</span>   */<a name="line.1299"></a>
<span class="sourceLineNo">1300</span>  @Override<a name="line.1300"></a>
<span class="sourceLineNo">1301</span>  public int getValueOffset() {<a name="line.1301"></a>
<span class="sourceLineNo">1302</span>    int voffset = getKeyOffset() + getKeyLength();<a name="line.1302"></a>
<span class="sourceLineNo">1303</span>    return voffset;<a name="line.1303"></a>
<span class="sourceLineNo">1304</span>  }<a name="line.1304"></a>
<span class="sourceLineNo">1305</span><a name="line.1305"></a>
<span class="sourceLineNo">1306</span>  /**<a name="line.1306"></a>
<span class="sourceLineNo">1307</span>   * @return Value length<a name="line.1307"></a>
<span class="sourceLineNo">1308</span>   */<a name="line.1308"></a>
<span class="sourceLineNo">1309</span>  @Override<a name="line.1309"></a>
<span class="sourceLineNo">1310</span>  public int getValueLength() {<a name="line.1310"></a>
<span class="sourceLineNo">1311</span>    int vlength = Bytes.toInt(this.bytes, this.offset + Bytes.SIZEOF_INT);<a name="line.1311"></a>
<span class="sourceLineNo">1312</span>    return vlength;<a name="line.1312"></a>
<span class="sourceLineNo">1313</span>  }<a name="line.1313"></a>
<span class="sourceLineNo">1314</span><a name="line.1314"></a>
<span class="sourceLineNo">1315</span>  /**<a name="line.1315"></a>
<span class="sourceLineNo">1316</span>   * @return the backing array of the entire KeyValue (all KeyValue fields are in a single array)<a name="line.1316"></a>
<span class="sourceLineNo">1317</span>   */<a name="line.1317"></a>
<span class="sourceLineNo">1318</span>  @Override<a name="line.1318"></a>
<span class="sourceLineNo">1319</span>  public byte[] getRowArray() {<a name="line.1319"></a>
<span class="sourceLineNo">1320</span>    return bytes;<a name="line.1320"></a>
<span class="sourceLineNo">1321</span>  }<a name="line.1321"></a>
<span class="sourceLineNo">1322</span><a name="line.1322"></a>
<span class="sourceLineNo">1323</span>  /**<a name="line.1323"></a>
<span class="sourceLineNo">1324</span>   * @return Row offset<a name="line.1324"></a>
<span class="sourceLineNo">1325</span>   */<a name="line.1325"></a>
<span class="sourceLineNo">1326</span>  @Override<a name="line.1326"></a>
<span class="sourceLineNo">1327</span>  public int getRowOffset() {<a name="line.1327"></a>
<span class="sourceLineNo">1328</span>    return this.offset + ROW_KEY_OFFSET;<a name="line.1328"></a>
<span class="sourceLineNo">1329</span>  }<a name="line.1329"></a>
<span class="sourceLineNo">1330</span><a name="line.1330"></a>
<span class="sourceLineNo">1331</span>  /**<a name="line.1331"></a>
<span class="sourceLineNo">1332</span>   * @return Row length<a name="line.1332"></a>
<span class="sourceLineNo">1333</span>   */<a name="line.1333"></a>
<span class="sourceLineNo">1334</span>  @Override<a name="line.1334"></a>
<span class="sourceLineNo">1335</span>  public short getRowLength() {<a name="line.1335"></a>
<span class="sourceLineNo">1336</span>    return Bytes.toShort(this.bytes, getKeyOffset());<a name="line.1336"></a>
<span class="sourceLineNo">1337</span>  }<a name="line.1337"></a>
<span class="sourceLineNo">1338</span><a name="line.1338"></a>
<span class="sourceLineNo">1339</span>  /**<a name="line.1339"></a>
<span class="sourceLineNo">1340</span>   * @return the backing array of the entire KeyValue (all KeyValue fields are in a single array)<a name="line.1340"></a>
<span class="sourceLineNo">1341</span>   */<a name="line.1341"></a>
<span class="sourceLineNo">1342</span>  @Override<a name="line.1342"></a>
<span class="sourceLineNo">1343</span>  public byte[] getFamilyArray() {<a name="line.1343"></a>
<span class="sourceLineNo">1344</span>    return bytes;<a name="line.1344"></a>
<span class="sourceLineNo">1345</span>  }<a name="line.1345"></a>
<span class="sourceLineNo">1346</span><a name="line.1346"></a>
<span class="sourceLineNo">1347</span>  /**<a name="line.1347"></a>
<span class="sourceLineNo">1348</span>   * @return Family offset<a name="line.1348"></a>
<span class="sourceLineNo">1349</span>   */<a name="line.1349"></a>
<span class="sourceLineNo">1350</span>  @Override<a name="line.1350"></a>
<span class="sourceLineNo">1351</span>  public int getFamilyOffset() {<a name="line.1351"></a>
<span class="sourceLineNo">1352</span>    return getFamilyOffset(getFamilyLengthPosition(getRowLength()));<a name="line.1352"></a>
<span class="sourceLineNo">1353</span>  }<a name="line.1353"></a>
<span class="sourceLineNo">1354</span><a name="line.1354"></a>
<span class="sourceLineNo">1355</span>  /**<a name="line.1355"></a>
<span class="sourceLineNo">1356</span>   * @return Family offset<a name="line.1356"></a>
<span class="sourceLineNo">1357</span>   */<a name="line.1357"></a>
<span class="sourceLineNo">1358</span>  int getFamilyOffset(int familyLenPosition) {<a name="line.1358"></a>
<span class="sourceLineNo">1359</span>    return familyLenPosition + Bytes.SIZEOF_BYTE;<a name="line.1359"></a>
<span class="sourceLineNo">1360</span>  }<a name="line.1360"></a>
<span class="sourceLineNo">1361</span><a name="line.1361"></a>
<span class="sourceLineNo">1362</span>  /**<a name="line.1362"></a>
<span class="sourceLineNo">1363</span>   * @return Family length<a name="line.1363"></a>
<span class="sourceLineNo">1364</span>   */<a name="line.1364"></a>
<span class="sourceLineNo">1365</span>  @Override<a name="line.1365"></a>
<span class="sourceLineNo">1366</span>  public byte getFamilyLength() {<a name="line.1366"></a>
<span class="sourceLineNo">1367</span>    return getFamilyLength(getFamilyLengthPosition(getRowLength()));<a name="line.1367"></a>
<span class="sourceLineNo">1368</span>  }<a name="line.1368"></a>
<span class="sourceLineNo">1369</span><a name="line.1369"></a>
<span class="sourceLineNo">1370</span>  /**<a name="line.1370"></a>
<span class="sourceLineNo">1371</span>   * @return Family length<a name="line.1371"></a>
<span class="sourceLineNo">1372</span>   */<a name="line.1372"></a>
<span class="sourceLineNo">1373</span>  public byte getFamilyLength(int famLenPos) {<a name="line.1373"></a>
<span class="sourceLineNo">1374</span>    return this.bytes[famLenPos];<a name="line.1374"></a>
<span class="sourceLineNo">1375</span>  }<a name="line.1375"></a>
<span class="sourceLineNo">1376</span><a name="line.1376"></a>
<span class="sourceLineNo">1377</span>  int getFamilyLengthPosition(int rowLength) {<a name="line.1377"></a>
<span class="sourceLineNo">1378</span>    return this.offset + KeyValue.ROW_KEY_OFFSET + rowLength;<a name="line.1378"></a>
<span class="sourceLineNo">1379</span>  }<a name="line.1379"></a>
<span class="sourceLineNo">1380</span><a name="line.1380"></a>
<span class="sourceLineNo">1381</span>  /**<a name="line.1381"></a>
<span class="sourceLineNo">1382</span>   * @return the backing array of the entire KeyValue (all KeyValue fields are in a single array)<a name="line.1382"></a>
<span class="sourceLineNo">1383</span>   */<a name="line.1383"></a>
<span class="sourceLineNo">1384</span>  @Override<a name="line.1384"></a>
<span class="sourceLineNo">1385</span>  public byte[] getQualifierArray() {<a name="line.1385"></a>
<span class="sourceLineNo">1386</span>    return bytes;<a name="line.1386"></a>
<span class="sourceLineNo">1387</span>  }<a name="line.1387"></a>
<span class="sourceLineNo">1388</span><a name="line.1388"></a>
<span class="sourceLineNo">1389</span>  /**<a name="line.1389"></a>
<span class="sourceLineNo">1390</span>   * @return Qualifier offset<a name="line.1390"></a>
<span class="sourceLineNo">1391</span>   */<a name="line.1391"></a>
<span class="sourceLineNo">1392</span>  @Override<a name="line.1392"></a>
<span class="sourceLineNo">1393</span>  public int getQualifierOffset() {<a name="line.1393"></a>
<span class="sourceLineNo">1394</span>    return getQualifierOffset(getFamilyOffset());<a name="line.1394"></a>
<span class="sourceLineNo">1395</span>  }<a name="line.1395"></a>
<span class="sourceLineNo">1396</span><a name="line.1396"></a>
<span class="sourceLineNo">1397</span>  /**<a name="line.1397"></a>
<span class="sourceLineNo">1398</span>   * @return Qualifier offset<a name="line.1398"></a>
<span class="sourceLineNo">1399</span>   */<a name="line.1399"></a>
<span class="sourceLineNo">1400</span>  private int getQualifierOffset(int foffset) {<a name="line.1400"></a>
<span class="sourceLineNo">1401</span>    return getQualifierOffset(foffset, getFamilyLength());<a name="line.1401"></a>
<span class="sourceLineNo">1402</span>  }<a name="line.1402"></a>
<span class="sourceLineNo">1403</span><a name="line.1403"></a>
<span class="sourceLineNo">1404</span>  /**<a name="line.1404"></a>
<span class="sourceLineNo">1405</span>   * @return Qualifier offset<a name="line.1405"></a>
<span class="sourceLineNo">1406</span>   */<a name="line.1406"></a>
<span class="sourceLineNo">1407</span>  int getQualifierOffset(int foffset, int flength) {<a name="line.1407"></a>
<span class="sourceLineNo">1408</span>    return foffset + flength;<a name="line.1408"></a>
<span class="sourceLineNo">1409</span>  }<a name="line.1409"></a>
<span class="sourceLineNo">1410</span><a name="line.1410"></a>
<span class="sourceLineNo">1411</span>  /**<a name="line.1411"></a>
<span class="sourceLineNo">1412</span>   * @return Qualifier length<a name="line.1412"></a>
<span class="sourceLineNo">1413</span>   */<a name="line.1413"></a>
<span class="sourceLineNo">1414</span>  @Override<a name="line.1414"></a>
<span class="sourceLineNo">1415</span>  public int getQualifierLength() {<a name="line.1415"></a>
<span class="sourceLineNo">1416</span>    return getQualifierLength(getRowLength(),getFamilyLength());<a name="line.1416"></a>
<span class="sourceLineNo">1417</span>  }<a name="line.1417"></a>
<span class="sourceLineNo">1418</span><a name="line.1418"></a>
<span class="sourceLineNo">1419</span>  /**<a name="line.1419"></a>
<span class="sourceLineNo">1420</span>   * @return Qualifier length<a name="line.1420"></a>
<span class="sourceLineNo">1421</span>   */<a name="line.1421"></a>
<span class="sourceLineNo">1422</span>  private int getQualifierLength(int rlength, int flength) {<a name="line.1422"></a>
<span class="sourceLineNo">1423</span>    return getQualifierLength(getKeyLength(), rlength, flength);<a name="line.1423"></a>
<span class="sourceLineNo">1424</span>  }<a name="line.1424"></a>
<span class="sourceLineNo">1425</span><a name="line.1425"></a>
<span class="sourceLineNo">1426</span>  /**<a name="line.1426"></a>
<span class="sourceLineNo">1427</span>   * @return Qualifier length<a name="line.1427"></a>
<span class="sourceLineNo">1428</span>   */<a name="line.1428"></a>
<span class="sourceLineNo">1429</span>  int getQualifierLength(int keyLength, int rlength, int flength) {<a name="line.1429"></a>
<span class="sourceLineNo">1430</span>    return keyLength - (int) getKeyDataStructureSize(rlength, flength, 0);<a name="line.1430"></a>
<span class="sourceLineNo">1431</span>  }<a name="line.1431"></a>
<span class="sourceLineNo">1432</span><a name="line.1432"></a>
<span class="sourceLineNo">1433</span>  /**<a name="line.1433"></a>
<span class="sourceLineNo">1434</span>   * @return Timestamp offset<a name="line.1434"></a>
<span class="sourceLineNo">1435</span>   */<a name="line.1435"></a>
<span class="sourceLineNo">1436</span>  public int getTimestampOffset() {<a name="line.1436"></a>
<span class="sourceLineNo">1437</span>    return getTimestampOffset(getKeyLength());<a name="line.1437"></a>
<span class="sourceLineNo">1438</span>  }<a name="line.1438"></a>
<span class="sourceLineNo">1439</span><a name="line.1439"></a>
<span class="sourceLineNo">1440</span>  /**<a name="line.1440"></a>
<span class="sourceLineNo">1441</span>   * @param keylength Pass if you have it to save on a int creation.<a name="line.1441"></a>
<span class="sourceLineNo">1442</span>   * @return Timestamp offset<a name="line.1442"></a>
<span class="sourceLineNo">1443</span>   */<a name="line.1443"></a>
<span class="sourceLineNo">1444</span>  private int getTimestampOffset(final int keylength) {<a name="line.1444"></a>
<span class="sourceLineNo">1445</span>    return getKeyOffset() + keylength - TIMESTAMP_TYPE_SIZE;<a name="line.1445"></a>
<span class="sourceLineNo">1446</span>  }<a name="line.1446"></a>
<span class="sourceLineNo">1447</span><a name="line.1447"></a>
<span class="sourceLineNo">1448</span>  /**<a name="line.1448"></a>
<span class="sourceLineNo">1449</span>   * @return True if this KeyValue has a LATEST_TIMESTAMP timestamp.<a name="line.1449"></a>
<span class="sourceLineNo">1450</span>   */<a name="line.1450"></a>
<span class="sourceLineNo">1451</span>  public boolean isLatestTimestamp() {<a name="line.1451"></a>
<span class="sourceLineNo">1452</span>    return Bytes.equals(getBuffer(), getTimestampOffset(), Bytes.SIZEOF_LONG,<a name="line.1452"></a>
<span class="sourceLineNo">1453</span>      HConstants.LATEST_TIMESTAMP_BYTES, 0, Bytes.SIZEOF_LONG);<a name="line.1453"></a>
<span class="sourceLineNo">1454</span>  }<a name="line.1454"></a>
<span class="sourceLineNo">1455</span><a name="line.1455"></a>
<span class="sourceLineNo">1456</span>  /**<a name="line.1456"></a>
<span class="sourceLineNo">1457</span>   * @param now Time to set into &lt;code&gt;this&lt;/code&gt; IFF timestamp ==<a name="line.1457"></a>
<span class="sourceLineNo">1458</span>   * {@link HConstants#LATEST_TIMESTAMP} (else, its a noop).<a name="line.1458"></a>
<span class="sourceLineNo">1459</span>   * @return True is we modified this.<a name="line.1459"></a>
<span class="sourceLineNo">1460</span>   */<a name="line.1460"></a>
<span class="sourceLineNo">1461</span>  public boolean updateLatestStamp(final byte [] now) {<a name="line.1461"></a>
<span class="sourceLineNo">1462</span>    if (this.isLatestTimestamp()) {<a name="line.1462"></a>
<span class="sourceLineNo">1463</span>      int tsOffset = getTimestampOffset();<a name="line.1463"></a>
<span class="sourceLineNo">1464</span>      System.arraycopy(now, 0, this.bytes, tsOffset, Bytes.SIZEOF_LONG);<a name="line.1464"></a>
<span class="sourceLineNo">1465</span>      // clear cache or else getTimestamp() possibly returns an old value<a name="line.1465"></a>
<span class="sourceLineNo">1466</span>      return true;<a name="line.1466"></a>
<span class="sourceLineNo">1467</span>    }<a name="line.1467"></a>
<span class="sourceLineNo">1468</span>    return false;<a name="line.1468"></a>
<span class="sourceLineNo">1469</span>  }<a name="line.1469"></a>
<span class="sourceLineNo">1470</span><a name="line.1470"></a>
<span class="sourceLineNo">1471</span>  @Override<a name="line.1471"></a>
<span class="sourceLineNo">1472</span>  public void setTimestamp(long ts) {<a name="line.1472"></a>
<span class="sourceLineNo">1473</span>    Bytes.putBytes(this.bytes, this.getTimestampOffset(), Bytes.toBytes(ts), 0, Bytes.SIZEOF_LONG);<a name="line.1473"></a>
<span class="sourceLineNo">1474</span>  }<a name="line.1474"></a>
<span class="sourceLineNo">1475</span><a name="line.1475"></a>
<span class="sourceLineNo">1476</span>  @Override<a name="line.1476"></a>
<span class="sourceLineNo">1477</span>  public void setTimestamp(byte[] ts) {<a name="line.1477"></a>
<span class="sourceLineNo">1478</span>    Bytes.putBytes(this.bytes, this.getTimestampOffset(), ts, 0, Bytes.SIZEOF_LONG);<a name="line.1478"></a>
<span class="sourceLineNo">1479</span>  }<a name="line.1479"></a>
<span class="sourceLineNo">1480</span><a name="line.1480"></a>
<span class="sourceLineNo">1481</span>  //---------------------------------------------------------------------------<a name="line.1481"></a>
<span class="sourceLineNo">1482</span>  //<a name="line.1482"></a>
<span class="sourceLineNo">1483</span>  //  Methods that return copies of fields<a name="line.1483"></a>
<span class="sourceLineNo">1484</span>  //<a name="line.1484"></a>
<span class="sourceLineNo">1485</span>  //---------------------------------------------------------------------------<a name="line.1485"></a>
<span class="sourceLineNo">1486</span><a name="line.1486"></a>
<span class="sourceLineNo">1487</span>  /**<a name="line.1487"></a>
<span class="sourceLineNo">1488</span>   * Do not use unless you have to. Used internally for compacting and testing. Use<a name="line.1488"></a>
<span class="sourceLineNo">1489</span>   * {@link #getRowArray()}, {@link #getFamilyArray()}, {@link #getQualifierArray()}, and<a name="line.1489"></a>
<span class="sourceLineNo">1490</span>   * {@link #getValueArray()} if accessing a KeyValue client-side.<a name="line.1490"></a>
<span class="sourceLineNo">1491</span>   * @return Copy of the key portion only.<a name="line.1491"></a>
<span class="sourceLineNo">1492</span>   */<a name="line.1492"></a>
<span class="sourceLineNo">1493</span>  public byte [] getKey() {<a name="line.1493"></a>
<span class="sourceLineNo">1494</span>    int keylength = getKeyLength();<a name="line.1494"></a>
<span class="sourceLineNo">1495</span>    byte [] key = new byte[keylength];<a name="line.1495"></a>
<span class="sourceLineNo">1496</span>    System.arraycopy(getBuffer(), getKeyOffset(), key, 0, keylength);<a name="line.1496"></a>
<span class="sourceLineNo">1497</span>    return key;<a name="line.1497"></a>
<span class="sourceLineNo">1498</span>  }<a name="line.1498"></a>
<span class="sourceLineNo">1499</span><a name="line.1499"></a>
<span class="sourceLineNo">1500</span>  /**<a name="line.1500"></a>
<span class="sourceLineNo">1501</span>   *<a name="line.1501"></a>
<span class="sourceLineNo">1502</span>   * @return Timestamp<a name="line.1502"></a>
<span class="sourceLineNo">1503</span>   */<a name="line.1503"></a>
<span class="sourceLineNo">1504</span>  @Override<a name="line.1504"></a>
<span class="sourceLineNo">1505</span>  public long getTimestamp() {<a name="line.1505"></a>
<span class="sourceLineNo">1506</span>    return getTimestamp(getKeyLength());<a name="line.1506"></a>
<span class="sourceLineNo">1507</span>  }<a name="line.1507"></a>
<span class="sourceLineNo">1508</span><a name="line.1508"></a>
<span class="sourceLineNo">1509</span>  /**<a name="line.1509"></a>
<span class="sourceLineNo">1510</span>   * @param keylength Pass if you have it to save on a int creation.<a name="line.1510"></a>
<span class="sourceLineNo">1511</span>   * @return Timestamp<a name="line.1511"></a>
<span class="sourceLineNo">1512</span>   */<a name="line.1512"></a>
<span class="sourceLineNo">1513</span>  long getTimestamp(final int keylength) {<a name="line.1513"></a>
<span class="sourceLineNo">1514</span>    int tsOffset = getTimestampOffset(keylength);<a name="line.1514"></a>
<span class="sourceLineNo">1515</span>    return Bytes.toLong(this.bytes, tsOffset);<a name="line.1515"></a>
<span class="sourceLineNo">1516</span>  }<a name="line.1516"></a>
<span class="sourceLineNo">1517</span><a name="line.1517"></a>
<span class="sourceLineNo">1518</span>  /**<a name="line.1518"></a>
<span class="sourceLineNo">1519</span>   * @return KeyValue.TYPE byte representation<a name="line.1519"></a>
<span class="sourceLineNo">1520</span>   */<a name="line.1520"></a>
<span class="sourceLineNo">1521</span>  @Override<a name="line.1521"></a>
<span class="sourceLineNo">1522</span>  public byte getTypeByte() {<a name="line.1522"></a>
<span class="sourceLineNo">1523</span>    return getTypeByte(getKeyLength());<a name="line.1523"></a>
<span class="sourceLineNo">1524</span>  }<a name="line.1524"></a>
<span class="sourceLineNo">1525</span><a name="line.1525"></a>
<span class="sourceLineNo">1526</span>  byte getTypeByte(int keyLength) {<a name="line.1526"></a>
<span class="sourceLineNo">1527</span>    return this.bytes[this.offset + keyLength - 1 + ROW_OFFSET];<a name="line.1527"></a>
<span class="sourceLineNo">1528</span>  }<a name="line.1528"></a>
<span class="sourceLineNo">1529</span><a name="line.1529"></a>
<span class="sourceLineNo">1530</span>  /**<a name="line.1530"></a>
<span class="sourceLineNo">1531</span>   * This returns the offset where the tag actually starts.<a name="line.1531"></a>
<span class="sourceLineNo">1532</span>   */<a name="line.1532"></a>
<span class="sourceLineNo">1533</span>  @Override<a name="line.1533"></a>
<span class="sourceLineNo">1534</span>  public int getTagsOffset() {<a name="line.1534"></a>
<span class="sourceLineNo">1535</span>    int tagsLen = getTagsLength();<a name="line.1535"></a>
<span class="sourceLineNo">1536</span>    if (tagsLen == 0) {<a name="line.1536"></a>
<span class="sourceLineNo">1537</span>      return this.offset + this.length;<a name="line.1537"></a>
<span class="sourceLineNo">1538</span>    }<a name="line.1538"></a>
<span class="sourceLineNo">1539</span>    return this.offset + this.length - tagsLen;<a name="line.1539"></a>
<span class="sourceLineNo">1540</span>  }<a name="line.1540"></a>
<span class="sourceLineNo">1541</span><a name="line.1541"></a>
<span class="sourceLineNo">1542</span>  /**<a name="line.1542"></a>
<span class="sourceLineNo">1543</span>   * This returns the total length of the tag bytes<a name="line.1543"></a>
<span class="sourceLineNo">1544</span>   */<a name="line.1544"></a>
<span class="sourceLineNo">1545</span>  @Override<a name="line.1545"></a>
<span class="sourceLineNo">1546</span>  public int getTagsLength() {<a name="line.1546"></a>
<span class="sourceLineNo">1547</span>    int tagsLen = this.length - (getKeyLength() + getValueLength() + KEYVALUE_INFRASTRUCTURE_SIZE);<a name="line.1547"></a>
<span class="sourceLineNo">1548</span>    if (tagsLen &gt; 0) {<a name="line.1548"></a>
<span class="sourceLineNo">1549</span>      // There are some Tag bytes in the byte[]. So reduce 2 bytes which is added to denote the tags<a name="line.1549"></a>
<span class="sourceLineNo">1550</span>      // length<a name="line.1550"></a>
<span class="sourceLineNo">1551</span>      tagsLen -= TAGS_LENGTH_SIZE;<a name="line.1551"></a>
<span class="sourceLineNo">1552</span>    }<a name="line.1552"></a>
<span class="sourceLineNo">1553</span>    return tagsLen;<a name="line.1553"></a>
<span class="sourceLineNo">1554</span>  }<a name="line.1554"></a>
<span class="sourceLineNo">1555</span><a name="line.1555"></a>
<span class="sourceLineNo">1556</span>  /**<a name="line.1556"></a>
<span class="sourceLineNo">1557</span>   * @return the backing array of the entire KeyValue (all KeyValue fields are in a single array)<a name="line.1557"></a>
<span class="sourceLineNo">1558</span>   */<a name="line.1558"></a>
<span class="sourceLineNo">1559</span>  @Override<a name="line.1559"></a>
<span class="sourceLineNo">1560</span>  public byte[] getTagsArray() {<a name="line.1560"></a>
<span class="sourceLineNo">1561</span>    return bytes;<a name="line.1561"></a>
<span class="sourceLineNo">1562</span>  }<a name="line.1562"></a>
<span class="sourceLineNo">1563</span><a name="line.1563"></a>
<span class="sourceLineNo">1564</span>  /**<a name="line.1564"></a>
<span class="sourceLineNo">1565</span>   * Creates a new KeyValue that only contains the key portion (the value is<a name="line.1565"></a>
<span class="sourceLineNo">1566</span>   * set to be null).<a name="line.1566"></a>
<span class="sourceLineNo">1567</span>   *<a name="line.1567"></a>
<span class="sourceLineNo">1568</span>   * TODO only used by KeyOnlyFilter -- move there.<a name="line.1568"></a>
<span class="sourceLineNo">1569</span>   * @param lenAsVal replace value with the actual value length (false=empty)<a name="line.1569"></a>
<span class="sourceLineNo">1570</span>   */<a name="line.1570"></a>
<span class="sourceLineNo">1571</span>  public KeyValue createKeyOnly(boolean lenAsVal) {<a name="line.1571"></a>
<span class="sourceLineNo">1572</span>    // KV format:  &lt;keylen:4&gt;&lt;valuelen:4&gt;&lt;key:keylen&gt;&lt;value:valuelen&gt;<a name="line.1572"></a>
<span class="sourceLineNo">1573</span>    // Rebuild as: &lt;keylen:4&gt;&lt;0:4&gt;&lt;key:keylen&gt;<a name="line.1573"></a>
<span class="sourceLineNo">1574</span>    int dataLen = lenAsVal? Bytes.SIZEOF_INT : 0;<a name="line.1574"></a>
<span class="sourceLineNo">1575</span>    byte [] newBuffer = new byte[getKeyLength() + ROW_OFFSET + dataLen];<a name="line.1575"></a>
<span class="sourceLineNo">1576</span>    System.arraycopy(this.bytes, this.offset, newBuffer, 0,<a name="line.1576"></a>
<span class="sourceLineNo">1577</span>        Math.min(newBuffer.length,this.length));<a name="line.1577"></a>
<span class="sourceLineNo">1578</span>    Bytes.putInt(newBuffer, Bytes.SIZEOF_INT, dataLen);<a name="line.1578"></a>
<span class="sourceLineNo">1579</span>    if (lenAsVal) {<a name="line.1579"></a>
<span class="sourceLineNo">1580</span>      Bytes.putInt(newBuffer, newBuffer.length - dataLen, this.getValueLength());<a name="line.1580"></a>
<span class="sourceLineNo">1581</span>    }<a name="line.1581"></a>
<span class="sourceLineNo">1582</span>    return new KeyValue(newBuffer);<a name="line.1582"></a>
<span class="sourceLineNo">1583</span>  }<a name="line.1583"></a>
<span class="sourceLineNo">1584</span><a name="line.1584"></a>
<span class="sourceLineNo">1585</span>  /**<a name="line.1585"></a>
<span class="sourceLineNo">1586</span>   * @param b<a name="line.1586"></a>
<span class="sourceLineNo">1587</span>   * @param delimiter<a name="line.1587"></a>
<span class="sourceLineNo">1588</span>   * @return Index of delimiter having started from start of &lt;code&gt;b&lt;/code&gt;<a name="line.1588"></a>
<span class="sourceLineNo">1589</span>   * moving rightward.<a name="line.1589"></a>
<span class="sourceLineNo">1590</span>   */<a name="line.1590"></a>
<span class="sourceLineNo">1591</span>  public static int getDelimiter(final byte [] b, int offset, final int length,<a name="line.1591"></a>
<span class="sourceLineNo">1592</span>      final int delimiter) {<a name="line.1592"></a>
<span class="sourceLineNo">1593</span>    if (b == null) {<a name="line.1593"></a>
<span class="sourceLineNo">1594</span>      throw new IllegalArgumentException("Passed buffer is null");<a name="line.1594"></a>
<span class="sourceLineNo">1595</span>    }<a name="line.1595"></a>
<span class="sourceLineNo">1596</span>    int result = -1;<a name="line.1596"></a>
<span class="sourceLineNo">1597</span>    for (int i = offset; i &lt; length + offset; i++) {<a name="line.1597"></a>
<span class="sourceLineNo">1598</span>      if (b[i] == delimiter) {<a name="line.1598"></a>
<span class="sourceLineNo">1599</span>        result = i;<a name="line.1599"></a>
<span class="sourceLineNo">1600</span>        break;<a name="line.1600"></a>
<span class="sourceLineNo">1601</span>      }<a name="line.1601"></a>
<span class="sourceLineNo">1602</span>    }<a name="line.1602"></a>
<span class="sourceLineNo">1603</span>    return result;<a name="line.1603"></a>
<span class="sourceLineNo">1604</span>  }<a name="line.1604"></a>
<span class="sourceLineNo">1605</span><a name="line.1605"></a>
<span class="sourceLineNo">1606</span>  /**<a name="line.1606"></a>
<span class="sourceLineNo">1607</span>   * Find index of passed delimiter walking from end of buffer backwards.<a name="line.1607"></a>
<span class="sourceLineNo">1608</span>   * @param b<a name="line.1608"></a>
<span class="sourceLineNo">1609</span>   * @param delimiter<a name="line.1609"></a>
<span class="sourceLineNo">1610</span>   * @return Index of delimiter<a name="line.1610"></a>
<span class="sourceLineNo">1611</span>   */<a name="line.1611"></a>
<span class="sourceLineNo">1612</span>  public static int getDelimiterInReverse(final byte [] b, final int offset,<a name="line.1612"></a>
<span class="sourceLineNo">1613</span>      final int length, final int delimiter) {<a name="line.1613"></a>
<span class="sourceLineNo">1614</span>    if (b == null) {<a name="line.1614"></a>
<span class="sourceLineNo">1615</span>      throw new IllegalArgumentException("Passed buffer is null");<a name="line.1615"></a>
<span class="sourceLineNo">1616</span>    }<a name="line.1616"></a>
<span class="sourceLineNo">1617</span>    int result = -1;<a name="line.1617"></a>
<span class="sourceLineNo">1618</span>    for (int i = (offset + length) - 1; i &gt;= offset; i--) {<a name="line.1618"></a>
<span class="sourceLineNo">1619</span>      if (b[i] == delimiter) {<a name="line.1619"></a>
<span class="sourceLineNo">1620</span>        result = i;<a name="line.1620"></a>
<span class="sourceLineNo">1621</span>        break;<a name="line.1621"></a>
<span class="sourceLineNo">1622</span>      }<a name="line.1622"></a>
<span class="sourceLineNo">1623</span>    }<a name="line.1623"></a>
<span class="sourceLineNo">1624</span>    return result;<a name="line.1624"></a>
<span class="sourceLineNo">1625</span>  }<a name="line.1625"></a>
<span class="sourceLineNo">1626</span><a name="line.1626"></a>
<span class="sourceLineNo">1627</span>  /**<a name="line.1627"></a>
<span class="sourceLineNo">1628</span>   * A {@link KVComparator} for &lt;code&gt;hbase:meta&lt;/code&gt; catalog table<a name="line.1628"></a>
<span class="sourceLineNo">1629</span>   * {@link KeyValue}s.<a name="line.1629"></a>
<span class="sourceLineNo">1630</span>   * @deprecated : {@link MetaCellComparator#META_COMPARATOR} to be used.<a name="line.1630"></a>
<span class="sourceLineNo">1631</span>   *   Deprecated for hbase 2.0, remove for hbase 3.0.<a name="line.1631"></a>
<span class="sourceLineNo">1632</span>   */<a name="line.1632"></a>
<span class="sourceLineNo">1633</span>  @Deprecated<a name="line.1633"></a>
<span class="sourceLineNo">1634</span>  public static class MetaComparator extends KVComparator {<a name="line.1634"></a>
<span class="sourceLineNo">1635</span>    /**<a name="line.1635"></a>
<span class="sourceLineNo">1636</span>     * Compare key portion of a {@link KeyValue} for keys in &lt;code&gt;hbase:meta&lt;/code&gt;<a name="line.1636"></a>
<span class="sourceLineNo">1637</span>     * table.<a name="line.1637"></a>
<span class="sourceLineNo">1638</span>     */<a name="line.1638"></a>
<span class="sourceLineNo">1639</span>    @Override<a name="line.1639"></a>
<span class="sourceLineNo">1640</span>    public int compare(final Cell left, final Cell right) {<a name="line.1640"></a>
<span class="sourceLineNo">1641</span>      return PrivateCellUtil.compareKeyIgnoresMvcc(MetaCellComparator.META_COMPARATOR, left,<a name="line.1641"></a>
<span class="sourceLineNo">1642</span>        right);<a name="line.1642"></a>
<span class="sourceLineNo">1643</span>    }<a name="line.1643"></a>
<span class="sourceLineNo">1644</span><a name="line.1644"></a>
<span class="sourceLineNo">1645</span>    @Override<a name="line.1645"></a>
<span class="sourceLineNo">1646</span>    public int compareOnlyKeyPortion(Cell left, Cell right) {<a name="line.1646"></a>
<span class="sourceLineNo">1647</span>      return compare(left, right);<a name="line.1647"></a>
<span class="sourceLineNo">1648</span>    }<a name="line.1648"></a>
<span class="sourceLineNo">1649</span><a name="line.1649"></a>
<span class="sourceLineNo">1650</span>    @Override<a name="line.1650"></a>
<span class="sourceLineNo">1651</span>    public int compareRows(byte [] left, int loffset, int llength,<a name="line.1651"></a>
<span class="sourceLineNo">1652</span>        byte [] right, int roffset, int rlength) {<a name="line.1652"></a>
<span class="sourceLineNo">1653</span>      int leftDelimiter = getDelimiter(left, loffset, llength,<a name="line.1653"></a>
<span class="sourceLineNo">1654</span>          HConstants.DELIMITER);<a name="line.1654"></a>
<span class="sourceLineNo">1655</span>      int rightDelimiter = getDelimiter(right, roffset, rlength,<a name="line.1655"></a>
<span class="sourceLineNo">1656</span>          HConstants.DELIMITER);<a name="line.1656"></a>
<span class="sourceLineNo">1657</span>      // Compare up to the delimiter<a name="line.1657"></a>
<span class="sourceLineNo">1658</span>      int lpart = (leftDelimiter &lt; 0 ? llength :leftDelimiter - loffset);<a name="line.1658"></a>
<span class="sourceLineNo">1659</span>      int rpart = (rightDelimiter &lt; 0 ? rlength :rightDelimiter - roffset);<a name="line.1659"></a>
<span class="sourceLineNo">1660</span>      int result = Bytes.compareTo(left, loffset, lpart, right, roffset, rpart);<a name="line.1660"></a>
<span class="sourceLineNo">1661</span>      if (result != 0) {<a name="line.1661"></a>
<span class="sourceLineNo">1662</span>        return result;<a name="line.1662"></a>
<span class="sourceLineNo">1663</span>      } else {<a name="line.1663"></a>
<span class="sourceLineNo">1664</span>        if (leftDelimiter &lt; 0 &amp;&amp; rightDelimiter &gt;= 0) {<a name="line.1664"></a>
<span class="sourceLineNo">1665</span>          return -1;<a name="line.1665"></a>
<span class="sourceLineNo">1666</span>        } else if (rightDelimiter &lt; 0 &amp;&amp; leftDelimiter &gt;= 0) {<a name="line.1666"></a>
<span class="sourceLineNo">1667</span>          return 1;<a name="line.1667"></a>
<span class="sourceLineNo">1668</span>        } else if (leftDelimiter &lt; 0 &amp;&amp; rightDelimiter &lt; 0) {<a name="line.1668"></a>
<span class="sourceLineNo">1669</span>          return 0;<a name="line.1669"></a>
<span class="sourceLineNo">1670</span>        }<a name="line.1670"></a>
<span class="sourceLineNo">1671</span>      }<a name="line.1671"></a>
<span class="sourceLineNo">1672</span>      // Compare middle bit of the row.<a name="line.1672"></a>
<span class="sourceLineNo">1673</span>      // Move past delimiter<a name="line.1673"></a>
<span class="sourceLineNo">1674</span>      leftDelimiter++;<a name="line.1674"></a>
<span class="sourceLineNo">1675</span>      rightDelimiter++;<a name="line.1675"></a>
<span class="sourceLineNo">1676</span>      int leftFarDelimiter = getDelimiterInReverse(left, leftDelimiter,<a name="line.1676"></a>
<span class="sourceLineNo">1677</span>          llength - (leftDelimiter - loffset), HConstants.DELIMITER);<a name="line.1677"></a>
<span class="sourceLineNo">1678</span>      int rightFarDelimiter = getDelimiterInReverse(right,<a name="line.1678"></a>
<span class="sourceLineNo">1679</span>          rightDelimiter, rlength - (rightDelimiter - roffset),<a name="line.1679"></a>
<span class="sourceLineNo">1680</span>          HConstants.DELIMITER);<a name="line.1680"></a>
<span class="sourceLineNo">1681</span>      // Now compare middlesection of row.<a name="line.1681"></a>
<span class="sourceLineNo">1682</span>      lpart = (leftFarDelimiter &lt; 0 ? llength + loffset: leftFarDelimiter) - leftDelimiter;<a name="line.1682"></a>
<span class="sourceLineNo">1683</span>      rpart = (rightFarDelimiter &lt; 0 ? rlength + roffset: rightFarDelimiter)- rightDelimiter;<a name="line.1683"></a>
<span class="sourceLineNo">1684</span>      result = super.compareRows(left, leftDelimiter, lpart, right, rightDelimiter, rpart);<a name="line.1684"></a>
<span class="sourceLineNo">1685</span>      if (result != 0) {<a name="line.1685"></a>
<span class="sourceLineNo">1686</span>        return result;<a name="line.1686"></a>
<span class="sourceLineNo">1687</span>      }  else {<a name="line.1687"></a>
<span class="sourceLineNo">1688</span>        if (leftDelimiter &lt; 0 &amp;&amp; rightDelimiter &gt;= 0) {<a name="line.1688"></a>
<span class="sourceLineNo">1689</span>          return -1;<a name="line.1689"></a>
<span class="sourceLineNo">1690</span>        } else if (rightDelimiter &lt; 0 &amp;&amp; leftDelimiter &gt;= 0) {<a name="line.1690"></a>
<span class="sourceLineNo">1691</span>          return 1;<a name="line.1691"></a>
<span class="sourceLineNo">1692</span>        } else if (leftDelimiter &lt; 0 &amp;&amp; rightDelimiter &lt; 0) {<a name="line.1692"></a>
<span class="sourceLineNo">1693</span>          return 0;<a name="line.1693"></a>
<span class="sourceLineNo">1694</span>        }<a name="line.1694"></a>
<span class="sourceLineNo">1695</span>      }<a name="line.1695"></a>
<span class="sourceLineNo">1696</span>      // Compare last part of row, the rowid.<a name="line.1696"></a>
<span class="sourceLineNo">1697</span>      leftFarDelimiter++;<a name="line.1697"></a>
<span class="sourceLineNo">1698</span>      rightFarDelimiter++;<a name="line.1698"></a>
<span class="sourceLineNo">1699</span>      result = Bytes.compareTo(left, leftFarDelimiter, llength - (leftFarDelimiter - loffset),<a name="line.1699"></a>
<span class="sourceLineNo">1700</span>          right, rightFarDelimiter, rlength - (rightFarDelimiter - roffset));<a name="line.1700"></a>
<span class="sourceLineNo">1701</span>      return result;<a name="line.1701"></a>
<span class="sourceLineNo">1702</span>    }<a name="line.1702"></a>
<span class="sourceLineNo">1703</span><a name="line.1703"></a>
<span class="sourceLineNo">1704</span>    /**<a name="line.1704"></a>
<span class="sourceLineNo">1705</span>     * Don't do any fancy Block Index splitting tricks.<a name="line.1705"></a>
<span class="sourceLineNo">1706</span>     */<a name="line.1706"></a>
<span class="sourceLineNo">1707</span>    @Override<a name="line.1707"></a>
<span class="sourceLineNo">1708</span>    public byte[] getShortMidpointKey(final byte[] leftKey, final byte[] rightKey) {<a name="line.1708"></a>
<span class="sourceLineNo">1709</span>      return Arrays.copyOf(rightKey, rightKey.length);<a name="line.1709"></a>
<span class="sourceLineNo">1710</span>    }<a name="line.1710"></a>
<span class="sourceLineNo">1711</span><a name="line.1711"></a>
<span class="sourceLineNo">1712</span>    /**<a name="line.1712"></a>
<span class="sourceLineNo">1713</span>     * The HFileV2 file format's trailer contains this class name.  We reinterpret this and<a name="line.1713"></a>
<span class="sourceLineNo">1714</span>     * instantiate the appropriate comparator.<a name="line.1714"></a>
<span class="sourceLineNo">1715</span>     * TODO: With V3 consider removing this.<a name="line.1715"></a>
<span class="sourceLineNo">1716</span>     * @return legacy class name for FileFileTrailer#comparatorClassName<a name="line.1716"></a>
<span class="sourceLineNo">1717</span>     */<a name="line.1717"></a>
<span class="sourceLineNo">1718</span>    @Override<a name="line.1718"></a>
<span class="sourceLineNo">1719</span>    public String getLegacyKeyComparatorName() {<a name="line.1719"></a>
<span class="sourceLineNo">1720</span>      return "org.apache.hadoop.hbase.KeyValue$MetaKeyComparator";<a name="line.1720"></a>
<span class="sourceLineNo">1721</span>    }<a name="line.1721"></a>
<span class="sourceLineNo">1722</span><a name="line.1722"></a>
<span class="sourceLineNo">1723</span>    @Override<a name="line.1723"></a>
<span class="sourceLineNo">1724</span>    protected Object clone() throws CloneNotSupportedException {<a name="line.1724"></a>
<span class="sourceLineNo">1725</span>      return new MetaComparator();<a name="line.1725"></a>
<span class="sourceLineNo">1726</span>    }<a name="line.1726"></a>
<span class="sourceLineNo">1727</span><a name="line.1727"></a>
<span class="sourceLineNo">1728</span>    /**<a name="line.1728"></a>
<span class="sourceLineNo">1729</span>     * Override the row key comparison to parse and compare the meta row key parts.<a name="line.1729"></a>
<span class="sourceLineNo">1730</span>     */<a name="line.1730"></a>
<span class="sourceLineNo">1731</span>    @Override<a name="line.1731"></a>
<span class="sourceLineNo">1732</span>    protected int compareRowKey(final Cell l, final Cell r) {<a name="line.1732"></a>
<span class="sourceLineNo">1733</span>      byte[] left = l.getRowArray();<a name="line.1733"></a>
<span class="sourceLineNo">1734</span>      int loffset = l.getRowOffset();<a name="line.1734"></a>
<span class="sourceLineNo">1735</span>      int llength = l.getRowLength();<a name="line.1735"></a>
<span class="sourceLineNo">1736</span>      byte[] right = r.getRowArray();<a name="line.1736"></a>
<span class="sourceLineNo">1737</span>      int roffset = r.getRowOffset();<a name="line.1737"></a>
<span class="sourceLineNo">1738</span>      int rlength = r.getRowLength();<a name="line.1738"></a>
<span class="sourceLineNo">1739</span>      return compareRows(left, loffset, llength, right, roffset, rlength);<a name="line.1739"></a>
<span class="sourceLineNo">1740</span>    }<a name="line.1740"></a>
<span class="sourceLineNo">1741</span>  }<a name="line.1741"></a>
<span class="sourceLineNo">1742</span><a name="line.1742"></a>
<span class="sourceLineNo">1743</span>  /**<a name="line.1743"></a>
<span class="sourceLineNo">1744</span>   * Compare KeyValues.  When we compare KeyValues, we only compare the Key<a name="line.1744"></a>
<span class="sourceLineNo">1745</span>   * portion.  This means two KeyValues with same Key but different Values are<a name="line.1745"></a>
<span class="sourceLineNo">1746</span>   * considered the same as far as this Comparator is concerned.<a name="line.1746"></a>
<span class="sourceLineNo">1747</span>   * @deprecated : Use {@link CellComparatorImpl}. Deprecated for hbase 2.0, remove for hbase 3.0.<a name="line.1747"></a>
<span class="sourceLineNo">1748</span>   */<a name="line.1748"></a>
<span class="sourceLineNo">1749</span>  @Deprecated<a name="line.1749"></a>
<span class="sourceLineNo">1750</span>  public static class KVComparator implements RawComparator&lt;Cell&gt;, SamePrefixComparator&lt;byte[]&gt; {<a name="line.1750"></a>
<span class="sourceLineNo">1751</span><a name="line.1751"></a>
<span class="sourceLineNo">1752</span>    /**<a name="line.1752"></a>
<span class="sourceLineNo">1753</span>     * The HFileV2 file format's trailer contains this class name.  We reinterpret this and<a name="line.1753"></a>
<span class="sourceLineNo">1754</span>     * instantiate the appropriate comparator.<a name="line.1754"></a>
<span class="sourceLineNo">1755</span>     * TODO: With V3 consider removing this.<a name="line.1755"></a>
<span class="sourceLineNo">1756</span>     * @return legacy class name for FileFileTrailer#comparatorClassName<a name="line.1756"></a>
<span class="sourceLineNo">1757</span>     */<a name="line.1757"></a>
<span class="sourceLineNo">1758</span>    public String getLegacyKeyComparatorName() {<a name="line.1758"></a>
<span class="sourceLineNo">1759</span>      return "org.apache.hadoop.hbase.KeyValue$KeyComparator";<a name="line.1759"></a>
<span class="sourceLineNo">1760</span>    }<a name="line.1760"></a>
<span class="sourceLineNo">1761</span><a name="line.1761"></a>
<span class="sourceLineNo">1762</span>    @Override // RawComparator<a name="line.1762"></a>
<span class="sourceLineNo">1763</span>    public int compare(byte[] l, int loff, int llen, byte[] r, int roff, int rlen) {<a name="line.1763"></a>
<span class="sourceLineNo">1764</span>      return compareFlatKey(l,loff,llen, r,roff,rlen);<a name="line.1764"></a>
<span class="sourceLineNo">1765</span>    }<a name="line.1765"></a>
<span class="sourceLineNo">1766</span><a name="line.1766"></a>
<span class="sourceLineNo">1767</span><a name="line.1767"></a>
<span class="sourceLineNo">1768</span>    /**<a name="line.1768"></a>
<span class="sourceLineNo">1769</span>     * Compares the only the user specified portion of a Key.  This is overridden by MetaComparator.<a name="line.1769"></a>
<span class="sourceLineNo">1770</span>     * @param left<a name="line.1770"></a>
<span class="sourceLineNo">1771</span>     * @param right<a name="line.1771"></a>
<span class="sourceLineNo">1772</span>     * @return 0 if equal, &amp;lt;0 if left smaller, &amp;gt;0 if right smaller<a name="line.1772"></a>
<span class="sourceLineNo">1773</span>     */<a name="line.1773"></a>
<span class="sourceLineNo">1774</span>    protected int compareRowKey(final Cell left, final Cell right) {<a name="line.1774"></a>
<span class="sourceLineNo">1775</span>      return CellComparatorImpl.COMPARATOR.compareRows(left, right);<a name="line.1775"></a>
<span class="sourceLineNo">1776</span>    }<a name="line.1776"></a>
<span class="sourceLineNo">1777</span><a name="line.1777"></a>
<span class="sourceLineNo">1778</span>    /**<a name="line.1778"></a>
<span class="sourceLineNo">1779</span>     * Compares left to right assuming that left,loffset,llength and right,roffset,rlength are<a name="line.1779"></a>
<span class="sourceLineNo">1780</span>     * full KVs laid out in a flat byte[]s.<a name="line.1780"></a>
<span class="sourceLineNo">1781</span>     * @param left<a name="line.1781"></a>
<span class="sourceLineNo">1782</span>     * @param loffset<a name="line.1782"></a>
<span class="sourceLineNo">1783</span>     * @param llength<a name="line.1783"></a>
<span class="sourceLineNo">1784</span>     * @param right<a name="line.1784"></a>
<span class="sourceLineNo">1785</span>     * @param roffset<a name="line.1785"></a>
<span class="sourceLineNo">1786</span>     * @param rlength<a name="line.1786"></a>
<span class="sourceLineNo">1787</span>     * @return  0 if equal, &amp;lt;0 if left smaller, &amp;gt;0 if right smaller<a name="line.1787"></a>
<span class="sourceLineNo">1788</span>     */<a name="line.1788"></a>
<span class="sourceLineNo">1789</span>    public int compareFlatKey(byte[] left, int loffset, int llength,<a name="line.1789"></a>
<span class="sourceLineNo">1790</span>        byte[] right, int roffset, int rlength) {<a name="line.1790"></a>
<span class="sourceLineNo">1791</span>      // Compare row<a name="line.1791"></a>
<span class="sourceLineNo">1792</span>      short lrowlength = Bytes.toShort(left, loffset);<a name="line.1792"></a>
<span class="sourceLineNo">1793</span>      short rrowlength = Bytes.toShort(right, roffset);<a name="line.1793"></a>
<span class="sourceLineNo">1794</span>      int compare = compareRows(left, loffset + Bytes.SIZEOF_SHORT,<a name="line.1794"></a>
<span class="sourceLineNo">1795</span>          lrowlength, right, roffset + Bytes.SIZEOF_SHORT, rrowlength);<a name="line.1795"></a>
<span class="sourceLineNo">1796</span>      if (compare != 0) {<a name="line.1796"></a>
<span class="sourceLineNo">1797</span>        return compare;<a name="line.1797"></a>
<span class="sourceLineNo">1798</span>      }<a name="line.1798"></a>
<span class="sourceLineNo">1799</span><a name="line.1799"></a>
<span class="sourceLineNo">1800</span>      // Compare the rest of the two KVs without making any assumptions about<a name="line.1800"></a>
<span class="sourceLineNo">1801</span>      // the common prefix. This function will not compare rows anyway, so we<a name="line.1801"></a>
<span class="sourceLineNo">1802</span>      // don't need to tell it that the common prefix includes the row.<a name="line.1802"></a>
<span class="sourceLineNo">1803</span>      return compareWithoutRow(0, left, loffset, llength, right, roffset,<a name="line.1803"></a>
<span class="sourceLineNo">1804</span>          rlength, rrowlength);<a name="line.1804"></a>
<span class="sourceLineNo">1805</span>    }<a name="line.1805"></a>
<span class="sourceLineNo">1806</span><a name="line.1806"></a>
<span class="sourceLineNo">1807</span>    public int compareFlatKey(byte[] left, byte[] right) {<a name="line.1807"></a>
<span class="sourceLineNo">1808</span>      return compareFlatKey(left, 0, left.length, right, 0, right.length);<a name="line.1808"></a>
<span class="sourceLineNo">1809</span>    }<a name="line.1809"></a>
<span class="sourceLineNo">1810</span><a name="line.1810"></a>
<span class="sourceLineNo">1811</span>    // compare a key against row/fam/qual/ts/type<a name="line.1811"></a>
<span class="sourceLineNo">1812</span>    public int compareKey(Cell cell,<a name="line.1812"></a>
<span class="sourceLineNo">1813</span>        byte[] row, int roff, int rlen,<a name="line.1813"></a>
<span class="sourceLineNo">1814</span>        byte[] fam, int foff, int flen,<a name="line.1814"></a>
<span class="sourceLineNo">1815</span>        byte[] col, int coff, int clen,<a name="line.1815"></a>
<span class="sourceLineNo">1816</span>        long ts, byte type) {<a name="line.1816"></a>
<span class="sourceLineNo">1817</span><a name="line.1817"></a>
<span class="sourceLineNo">1818</span>      int compare = compareRows(<a name="line.1818"></a>
<span class="sourceLineNo">1819</span>        cell.getRowArray(), cell.getRowOffset(), cell.getRowLength(),<a name="line.1819"></a>
<span class="sourceLineNo">1820</span>        row, roff, rlen);<a name="line.1820"></a>
<span class="sourceLineNo">1821</span>      if (compare != 0) {<a name="line.1821"></a>
<span class="sourceLineNo">1822</span>        return compare;<a name="line.1822"></a>
<span class="sourceLineNo">1823</span>      }<a name="line.1823"></a>
<span class="sourceLineNo">1824</span>      // If the column is not specified, the "minimum" key type appears the<a name="line.1824"></a>
<span class="sourceLineNo">1825</span>      // latest in the sorted order, regardless of the timestamp. This is used<a name="line.1825"></a>
<span class="sourceLineNo">1826</span>      // for specifying the last key/value in a given row, because there is no<a name="line.1826"></a>
<span class="sourceLineNo">1827</span>      // "lexicographically last column" (it would be infinitely long). The<a name="line.1827"></a>
<span class="sourceLineNo">1828</span>      // "maximum" key type does not need this behavior.<a name="line.1828"></a>
<span class="sourceLineNo">1829</span>      if (cell.getFamilyLength() + cell.getQualifierLength() == 0<a name="line.1829"></a>
<span class="sourceLineNo">1830</span>          &amp;&amp; cell.getTypeByte() == Type.Minimum.getCode()) {<a name="line.1830"></a>
<span class="sourceLineNo">1831</span>        // left is "bigger", i.e. it appears later in the sorted order<a name="line.1831"></a>
<span class="sourceLineNo">1832</span>        return 1;<a name="line.1832"></a>
<span class="sourceLineNo">1833</span>      }<a name="line.1833"></a>
<span class="sourceLineNo">1834</span>      if (flen+clen == 0 &amp;&amp; type == Type.Minimum.getCode()) {<a name="line.1834"></a>
<span class="sourceLineNo">1835</span>        return -1;<a name="line.1835"></a>
<span class="sourceLineNo">1836</span>      }<a name="line.1836"></a>
<span class="sourceLineNo">1837</span><a name="line.1837"></a>
<span class="sourceLineNo">1838</span>      compare = compareFamilies(<a name="line.1838"></a>
<span class="sourceLineNo">1839</span>        cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength(),<a name="line.1839"></a>
<span class="sourceLineNo">1840</span>        fam, foff, flen);<a name="line.1840"></a>
<span class="sourceLineNo">1841</span>      if (compare != 0) {<a name="line.1841"></a>
<span class="sourceLineNo">1842</span>        return compare;<a name="line.1842"></a>
<span class="sourceLineNo">1843</span>      }<a name="line.1843"></a>
<span class="sourceLineNo">1844</span>      compare = compareColumns(<a name="line.1844"></a>
<span class="sourceLineNo">1845</span>        cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength(),<a name="line.1845"></a>
<span class="sourceLineNo">1846</span>        col, coff, clen);<a name="line.1846"></a>
<span class="sourceLineNo">1847</span>      if (compare != 0) {<a name="line.1847"></a>
<span class="sourceLineNo">1848</span>        return compare;<a name="line.1848"></a>
<span class="sourceLineNo">1849</span>      }<a name="line.1849"></a>
<span class="sourceLineNo">1850</span>      // Next compare timestamps.<a name="line.1850"></a>
<span class="sourceLineNo">1851</span>      compare = compareTimestamps(cell.getTimestamp(), ts);<a name="line.1851"></a>
<span class="sourceLineNo">1852</span>      if (compare != 0) {<a name="line.1852"></a>
<span class="sourceLineNo">1853</span>        return compare;<a name="line.1853"></a>
<span class="sourceLineNo">1854</span>      }<a name="line.1854"></a>
<span class="sourceLineNo">1855</span><a name="line.1855"></a>
<span class="sourceLineNo">1856</span>      // Compare types. Let the delete types sort ahead of puts; i.e. types<a name="line.1856"></a>
<span class="sourceLineNo">1857</span>      // of higher numbers sort before those of lesser numbers. Maximum (255)<a name="line.1857"></a>
<span class="sourceLineNo">1858</span>      // appears ahead of everything, and minimum (0) appears after<a name="line.1858"></a>
<span class="sourceLineNo">1859</span>      // everything.<a name="line.1859"></a>
<span class="sourceLineNo">1860</span>      return (0xff &amp; type) - (0xff &amp; cell.getTypeByte());<a name="line.1860"></a>
<span class="sourceLineNo">1861</span>    }<a name="line.1861"></a>
<span class="sourceLineNo">1862</span><a name="line.1862"></a>
<span class="sourceLineNo">1863</span>    public int compareOnlyKeyPortion(Cell left, Cell right) {<a name="line.1863"></a>
<span class="sourceLineNo">1864</span>      return PrivateCellUtil.compareKeyIgnoresMvcc(CellComparatorImpl.COMPARATOR, left, right);<a name="line.1864"></a>
<span class="sourceLineNo">1865</span>    }<a name="line.1865"></a>
<span class="sourceLineNo">1866</span><a name="line.1866"></a>
<span class="sourceLineNo">1867</span>    /**<a name="line.1867"></a>
<span class="sourceLineNo">1868</span>     * Compares the Key of a cell -- with fields being more significant in this order:<a name="line.1868"></a>
<span class="sourceLineNo">1869</span>     * rowkey, colfam/qual, timestamp, type, mvcc<a name="line.1869"></a>
<span class="sourceLineNo">1870</span>     */<a name="line.1870"></a>
<span class="sourceLineNo">1871</span>    @Override<a name="line.1871"></a>
<span class="sourceLineNo">1872</span>    public int compare(final Cell left, final Cell right) {<a name="line.1872"></a>
<span class="sourceLineNo">1873</span>      int compare = CellComparatorImpl.COMPARATOR.compare(left, right);<a name="line.1873"></a>
<span class="sourceLineNo">1874</span>      return compare;<a name="line.1874"></a>
<span class="sourceLineNo">1875</span>    }<a name="line.1875"></a>
<span class="sourceLineNo">1876</span><a name="line.1876"></a>
<span class="sourceLineNo">1877</span>    public int compareTimestamps(final Cell left, final Cell right) {<a name="line.1877"></a>
<span class="sourceLineNo">1878</span>      return CellComparatorImpl.COMPARATOR.compareTimestamps(left, right);<a name="line.1878"></a>
<span class="sourceLineNo">1879</span>    }<a name="line.1879"></a>
<span class="sourceLineNo">1880</span><a name="line.1880"></a>
<span class="sourceLineNo">1881</span>    /**<a name="line.1881"></a>
<span class="sourceLineNo">1882</span>     * @param left<a name="line.1882"></a>
<span class="sourceLineNo">1883</span>     * @param right<a name="line.1883"></a>
<span class="sourceLineNo">1884</span>     * @return Result comparing rows.<a name="line.1884"></a>
<span class="sourceLineNo">1885</span>     */<a name="line.1885"></a>
<span class="sourceLineNo">1886</span>    public int compareRows(final Cell left, final Cell right) {<a name="line.1886"></a>
<span class="sourceLineNo">1887</span>      return compareRows(left.getRowArray(),left.getRowOffset(), left.getRowLength(),<a name="line.1887"></a>
<span class="sourceLineNo">1888</span>      right.getRowArray(), right.getRowOffset(), right.getRowLength());<a name="line.1888"></a>
<span class="sourceLineNo">1889</span>    }<a name="line.1889"></a>
<span class="sourceLineNo">1890</span><a name="line.1890"></a>
<span class="sourceLineNo">1891</span>    /**<a name="line.1891"></a>
<span class="sourceLineNo">1892</span>     * Get the b[],o,l for left and right rowkey portions and compare.<a name="line.1892"></a>
<span class="sourceLineNo">1893</span>     * @param left<a name="line.1893"></a>
<span class="sourceLineNo">1894</span>     * @param loffset<a name="line.1894"></a>
<span class="sourceLineNo">1895</span>     * @param llength<a name="line.1895"></a>
<span class="sourceLineNo">1896</span>     * @param right<a name="line.1896"></a>
<span class="sourceLineNo">1897</span>     * @param roffset<a name="line.1897"></a>
<span class="sourceLineNo">1898</span>     * @param rlength<a name="line.1898"></a>
<span class="sourceLineNo">1899</span>     * @return 0 if equal, &amp;lt;0 if left smaller, &amp;gt;0 if right smaller<a name="line.1899"></a>
<span class="sourceLineNo">1900</span>     */<a name="line.1900"></a>
<span class="sourceLineNo">1901</span>    public int compareRows(byte[] left, int loffset, int llength, byte[] right, int roffset,<a name="line.1901"></a>
<span class="sourceLineNo">1902</span>        int rlength) {<a name="line.1902"></a>
<span class="sourceLineNo">1903</span>      return Bytes.compareTo(left, loffset, llength, right, roffset, rlength);<a name="line.1903"></a>
<span class="sourceLineNo">1904</span>    }<a name="line.1904"></a>
<span class="sourceLineNo">1905</span><a name="line.1905"></a>
<span class="sourceLineNo">1906</span>    int compareColumns(final Cell left, final short lrowlength, final Cell right,<a name="line.1906"></a>
<span class="sourceLineNo">1907</span>        final short rrowlength) {<a name="line.1907"></a>
<span class="sourceLineNo">1908</span>      return CellComparatorImpl.COMPARATOR.compareColumns(left, right);<a name="line.1908"></a>
<span class="sourceLineNo">1909</span>    }<a name="line.1909"></a>
<span class="sourceLineNo">1910</span><a name="line.1910"></a>
<span class="sourceLineNo">1911</span>    protected int compareColumns(<a name="line.1911"></a>
<span class="sourceLineNo">1912</span>        byte [] left, int loffset, int llength, final int lfamilylength,<a name="line.1912"></a>
<span class="sourceLineNo">1913</span>        byte [] right, int roffset, int rlength, final int rfamilylength) {<a name="line.1913"></a>
<span class="sourceLineNo">1914</span>      // Compare family portion first.<a name="line.1914"></a>
<span class="sourceLineNo">1915</span>      int diff = Bytes.compareTo(left, loffset, lfamilylength,<a name="line.1915"></a>
<span class="sourceLineNo">1916</span>        right, roffset, rfamilylength);<a name="line.1916"></a>
<span class="sourceLineNo">1917</span>      if (diff != 0) {<a name="line.1917"></a>
<span class="sourceLineNo">1918</span>        return diff;<a name="line.1918"></a>
<span class="sourceLineNo">1919</span>      }<a name="line.1919"></a>
<span class="sourceLineNo">1920</span>      // Compare qualifier portion<a name="line.1920"></a>
<span class="sourceLineNo">1921</span>      return Bytes.compareTo(left, loffset + lfamilylength,<a name="line.1921"></a>
<span class="sourceLineNo">1922</span>        llength - lfamilylength,<a name="line.1922"></a>
<span class="sourceLineNo">1923</span>        right, roffset + rfamilylength, rlength - rfamilylength);<a name="line.1923"></a>
<span class="sourceLineNo">1924</span>      }<a name="line.1924"></a>
<span class="sourceLineNo">1925</span><a name="line.1925"></a>
<span class="sourceLineNo">1926</span>    static int compareTimestamps(final long ltimestamp, final long rtimestamp) {<a name="line.1926"></a>
<span class="sourceLineNo">1927</span>      // The below older timestamps sorting ahead of newer timestamps looks<a name="line.1927"></a>
<span class="sourceLineNo">1928</span>      // wrong but it is intentional. This way, newer timestamps are first<a name="line.1928"></a>
<span class="sourceLineNo">1929</span>      // found when we iterate over a memstore and newer versions are the<a name="line.1929"></a>
<span class="sourceLineNo">1930</span>      // first we trip over when reading from a store file.<a name="line.1930"></a>
<span class="sourceLineNo">1931</span>      if (ltimestamp &lt; rtimestamp) {<a name="line.1931"></a>
<span class="sourceLineNo">1932</span>        return 1;<a name="line.1932"></a>
<span class="sourceLineNo">1933</span>      } else if (ltimestamp &gt; rtimestamp) {<a name="line.1933"></a>
<span class="sourceLineNo">1934</span>        return -1;<a name="line.1934"></a>
<span class="sourceLineNo">1935</span>      }<a name="line.1935"></a>
<span class="sourceLineNo">1936</span>      return 0;<a name="line.1936"></a>
<span class="sourceLineNo">1937</span>    }<a name="line.1937"></a>
<span class="sourceLineNo">1938</span><a name="line.1938"></a>
<span class="sourceLineNo">1939</span>    /**<a name="line.1939"></a>
<span class="sourceLineNo">1940</span>     * Overridden<a name="line.1940"></a>
<span class="sourceLineNo">1941</span>     * @param commonPrefix<a name="line.1941"></a>
<span class="sourceLineNo">1942</span>     * @param left<a name="line.1942"></a>
<span class="sourceLineNo">1943</span>     * @param loffset<a name="line.1943"></a>
<span class="sourceLineNo">1944</span>     * @param llength<a name="line.1944"></a>
<span class="sourceLineNo">1945</span>     * @param right<a name="line.1945"></a>
<span class="sourceLineNo">1946</span>     * @param roffset<a name="line.1946"></a>
<span class="sourceLineNo">1947</span>     * @param rlength<a name="line.1947"></a>
<span class="sourceLineNo">1948</span>     * @return 0 if equal, &amp;lt;0 if left smaller, &amp;gt;0 if right smaller<a name="line.1948"></a>
<span class="sourceLineNo">1949</span>     */<a name="line.1949"></a>
<span class="sourceLineNo">1950</span>    @Override // SamePrefixComparator<a name="line.1950"></a>
<span class="sourceLineNo">1951</span>    public int compareIgnoringPrefix(int commonPrefix, byte[] left,<a name="line.1951"></a>
<span class="sourceLineNo">1952</span>        int loffset, int llength, byte[] right, int roffset, int rlength) {<a name="line.1952"></a>
<span class="sourceLineNo">1953</span>      // Compare row<a name="line.1953"></a>
<span class="sourceLineNo">1954</span>      short lrowlength = Bytes.toShort(left, loffset);<a name="line.1954"></a>
<span class="sourceLineNo">1955</span>      short rrowlength;<a name="line.1955"></a>
<span class="sourceLineNo">1956</span><a name="line.1956"></a>
<span class="sourceLineNo">1957</span>      int comparisonResult = 0;<a name="line.1957"></a>
<span class="sourceLineNo">1958</span>      if (commonPrefix &lt; ROW_LENGTH_SIZE) {<a name="line.1958"></a>
<span class="sourceLineNo">1959</span>        // almost nothing in common<a name="line.1959"></a>
<span class="sourceLineNo">1960</span>        rrowlength = Bytes.toShort(right, roffset);<a name="line.1960"></a>
<span class="sourceLineNo">1961</span>        comparisonResult = compareRows(left, loffset + ROW_LENGTH_SIZE,<a name="line.1961"></a>
<span class="sourceLineNo">1962</span>            lrowlength, right, roffset + ROW_LENGTH_SIZE, rrowlength);<a name="line.1962"></a>
<span class="sourceLineNo">1963</span>      } else { // the row length is the same<a name="line.1963"></a>
<span class="sourceLineNo">1964</span>        rrowlength = lrowlength;<a name="line.1964"></a>
<span class="sourceLineNo">1965</span>        if (commonPrefix &lt; ROW_LENGTH_SIZE + rrowlength) {<a name="line.1965"></a>
<span class="sourceLineNo">1966</span>          // The rows are not the same. Exclude the common prefix and compare<a name="line.1966"></a>
<span class="sourceLineNo">1967</span>          // the rest of the two rows.<a name="line.1967"></a>
<span class="sourceLineNo">1968</span>          int common = commonPrefix - ROW_LENGTH_SIZE;<a name="line.1968"></a>
<span class="sourceLineNo">1969</span>          comparisonResult = compareRows(<a name="line.1969"></a>
<span class="sourceLineNo">1970</span>              left, loffset + common + ROW_LENGTH_SIZE, lrowlength - common,<a name="line.1970"></a>
<span class="sourceLineNo">1971</span>              right, roffset + common + ROW_LENGTH_SIZE, rrowlength - common);<a name="line.1971"></a>
<span class="sourceLineNo">1972</span>        }<a name="line.1972"></a>
<span class="sourceLineNo">1973</span>      }<a name="line.1973"></a>
<span class="sourceLineNo">1974</span>      if (comparisonResult != 0) {<a name="line.1974"></a>
<span class="sourceLineNo">1975</span>        return comparisonResult;<a name="line.1975"></a>
<span class="sourceLineNo">1976</span>      }<a name="line.1976"></a>
<span class="sourceLineNo">1977</span><a name="line.1977"></a>
<span class="sourceLineNo">1978</span>      assert lrowlength == rrowlength;<a name="line.1978"></a>
<span class="sourceLineNo">1979</span>      return compareWithoutRow(commonPrefix, left, loffset, llength, right,<a name="line.1979"></a>
<span class="sourceLineNo">1980</span>          roffset, rlength, lrowlength);<a name="line.1980"></a>
<span class="sourceLineNo">1981</span>    }<a name="line.1981"></a>
<span class="sourceLineNo">1982</span><a name="line.1982"></a>
<span class="sourceLineNo">1983</span>    /**<a name="line.1983"></a>
<span class="sourceLineNo">1984</span>     * Compare columnFamily, qualifier, timestamp, and key type (everything<a name="line.1984"></a>
<span class="sourceLineNo">1985</span>     * except the row). This method is used both in the normal comparator and<a name="line.1985"></a>
<span class="sourceLineNo">1986</span>     * the "same-prefix" comparator. Note that we are assuming that row portions<a name="line.1986"></a>
<span class="sourceLineNo">1987</span>     * of both KVs have already been parsed and found identical, and we don't<a name="line.1987"></a>
<span class="sourceLineNo">1988</span>     * validate that assumption here.<a name="line.1988"></a>
<span class="sourceLineNo">1989</span>     * @param commonPrefix<a name="line.1989"></a>
<span class="sourceLineNo">1990</span>     *          the length of the common prefix of the two key-values being<a name="line.1990"></a>
<span class="sourceLineNo">1991</span>     *          compared, including row length and row<a name="line.1991"></a>
<span class="sourceLineNo">1992</span>     */<a name="line.1992"></a>
<span class="sourceLineNo">1993</span>    private int compareWithoutRow(int commonPrefix, byte[] left, int loffset,<a name="line.1993"></a>
<span class="sourceLineNo">1994</span>        int llength, byte[] right, int roffset, int rlength, short rowlength) {<a name="line.1994"></a>
<span class="sourceLineNo">1995</span>      /***<a name="line.1995"></a>
<span class="sourceLineNo">1996</span>       * KeyValue Format and commonLength:<a name="line.1996"></a>
<span class="sourceLineNo">1997</span>       * |_keyLen_|_valLen_|_rowLen_|_rowKey_|_famiLen_|_fami_|_Quali_|....<a name="line.1997"></a>
<span class="sourceLineNo">1998</span>       * ------------------|-------commonLength--------|--------------<a name="line.1998"></a>
<span class="sourceLineNo">1999</span>       */<a name="line.1999"></a>
<span class="sourceLineNo">2000</span>      int commonLength = ROW_LENGTH_SIZE + FAMILY_LENGTH_SIZE + rowlength;<a name="line.2000"></a>
<span class="sourceLineNo">2001</span><a name="line.2001"></a>
<span class="sourceLineNo">2002</span>      // commonLength + TIMESTAMP_TYPE_SIZE<a name="line.2002"></a>
<span class="sourceLineNo">2003</span>      int commonLengthWithTSAndType = TIMESTAMP_TYPE_SIZE + commonLength;<a name="line.2003"></a>
<span class="sourceLineNo">2004</span>      // ColumnFamily + Qualifier length.<a name="line.2004"></a>
<span class="sourceLineNo">2005</span>      int lcolumnlength = llength - commonLengthWithTSAndType;<a name="line.2005"></a>
<span class="sourceLineNo">2006</span>      int rcolumnlength = rlength - commonLengthWithTSAndType;<a name="line.2006"></a>
<span class="sourceLineNo">2007</span><a name="line.2007"></a>
<span class="sourceLineNo">2008</span>      byte ltype = left[loffset + (llength - 1)];<a name="line.2008"></a>
<span class="sourceLineNo">2009</span>      byte rtype = right[roffset + (rlength - 1)];<a name="line.2009"></a>
<span class="sourceLineNo">2010</span><a name="line.2010"></a>
<span class="sourceLineNo">2011</span>      // If the column is not specified, the "minimum" key type appears the<a name="line.2011"></a>
<span class="sourceLineNo">2012</span>      // latest in the sorted order, regardless of the timestamp. This is used<a name="line.2012"></a>
<span class="sourceLineNo">2013</span>      // for specifying the last key/value in a given row, because there is no<a name="line.2013"></a>
<span class="sourceLineNo">2014</span>      // "lexicographically last column" (it would be infinitely long). The<a name="line.2014"></a>
<span class="sourceLineNo">2015</span>      // "maximum" key type does not need this behavior.<a name="line.2015"></a>
<span class="sourceLineNo">2016</span>      if (lcolumnlength == 0 &amp;&amp; ltype == Type.Minimum.getCode()) {<a name="line.2016"></a>
<span class="sourceLineNo">2017</span>        // left is "bigger", i.e. it appears later in the sorted order<a name="line.2017"></a>
<span class="sourceLineNo">2018</span>        return 1;<a name="line.2018"></a>
<span class="sourceLineNo">2019</span>      }<a name="line.2019"></a>
<span class="sourceLineNo">2020</span>      if (rcolumnlength == 0 &amp;&amp; rtype == Type.Minimum.getCode()) {<a name="line.2020"></a>
<span class="sourceLineNo">2021</span>        return -1;<a name="line.2021"></a>
<span class="sourceLineNo">2022</span>      }<a name="line.2022"></a>
<span class="sourceLineNo">2023</span><a name="line.2023"></a>
<span class="sourceLineNo">2024</span>      int lfamilyoffset = commonLength + loffset;<a name="line.2024"></a>
<span class="sourceLineNo">2025</span>      int rfamilyoffset = commonLength + roffset;<a name="line.2025"></a>
<span class="sourceLineNo">2026</span><a name="line.2026"></a>
<span class="sourceLineNo">2027</span>      // Column family length.<a name="line.2027"></a>
<span class="sourceLineNo">2028</span>      int lfamilylength = left[lfamilyoffset - 1];<a name="line.2028"></a>
<span class="sourceLineNo">2029</span>      int rfamilylength = right[rfamilyoffset - 1];<a name="line.2029"></a>
<span class="sourceLineNo">2030</span>      // If left family size is not equal to right family size, we need not<a name="line.2030"></a>
<span class="sourceLineNo">2031</span>      // compare the qualifiers.<a name="line.2031"></a>
<span class="sourceLineNo">2032</span>      boolean sameFamilySize = (lfamilylength == rfamilylength);<a name="line.2032"></a>
<span class="sourceLineNo">2033</span>      int common = 0;<a name="line.2033"></a>
<span class="sourceLineNo">2034</span>      if (commonPrefix &gt; 0) {<a name="line.2034"></a>
<span class="sourceLineNo">2035</span>        common = Math.max(0, commonPrefix - commonLength);<a name="line.2035"></a>
<span class="sourceLineNo">2036</span>        if (!sameFamilySize) {<a name="line.2036"></a>
<span class="sourceLineNo">2037</span>          // Common should not be larger than Math.min(lfamilylength,<a name="line.2037"></a>
<span class="sourceLineNo">2038</span>          // rfamilylength).<a name="line.2038"></a>
<span class="sourceLineNo">2039</span>          common = Math.min(common, Math.min(lfamilylength, rfamilylength));<a name="line.2039"></a>
<span class="sourceLineNo">2040</span>        } else {<a name="line.2040"></a>
<span class="sourceLineNo">2041</span>          common = Math.min(common, Math.min(lcolumnlength, rcolumnlength));<a name="line.2041"></a>
<span class="sourceLineNo">2042</span>        }<a name="line.2042"></a>
<span class="sourceLineNo">2043</span>      }<a name="line.2043"></a>
<span class="sourceLineNo">2044</span>      if (!sameFamilySize) {<a name="line.2044"></a>
<span class="sourceLineNo">2045</span>        // comparing column family is enough.<a name="line.2045"></a>
<span class="sourceLineNo">2046</span>        return Bytes.compareTo(left, lfamilyoffset + common, lfamilylength<a name="line.2046"></a>
<span class="sourceLineNo">2047</span>            - common, right, rfamilyoffset + common, rfamilylength - common);<a name="line.2047"></a>
<span class="sourceLineNo">2048</span>      }<a name="line.2048"></a>
<span class="sourceLineNo">2049</span>      // Compare family &amp; qualifier together.<a name="line.2049"></a>
<span class="sourceLineNo">2050</span>      final int comparison = Bytes.compareTo(left, lfamilyoffset + common,<a name="line.2050"></a>
<span class="sourceLineNo">2051</span>          lcolumnlength - common, right, rfamilyoffset + common,<a name="line.2051"></a>
<span class="sourceLineNo">2052</span>          rcolumnlength - common);<a name="line.2052"></a>
<span class="sourceLineNo">2053</span>      if (comparison != 0) {<a name="line.2053"></a>
<span class="sourceLineNo">2054</span>        return comparison;<a name="line.2054"></a>
<span class="sourceLineNo">2055</span>      }<a name="line.2055"></a>
<span class="sourceLineNo">2056</span><a name="line.2056"></a>
<span class="sourceLineNo">2057</span>      ////<a name="line.2057"></a>
<span class="sourceLineNo">2058</span>      // Next compare timestamps.<a name="line.2058"></a>
<span class="sourceLineNo">2059</span>      long ltimestamp = Bytes.toLong(left,<a name="line.2059"></a>
<span class="sourceLineNo">2060</span>          loffset + (llength - TIMESTAMP_TYPE_SIZE));<a name="line.2060"></a>
<span class="sourceLineNo">2061</span>      long rtimestamp = Bytes.toLong(right,<a name="line.2061"></a>
<span class="sourceLineNo">2062</span>          roffset + (rlength - TIMESTAMP_TYPE_SIZE));<a name="line.2062"></a>
<span class="sourceLineNo">2063</span>      int compare = compareTimestamps(ltimestamp, rtimestamp);<a name="line.2063"></a>
<span class="sourceLineNo">2064</span>      if (compare != 0) {<a name="line.2064"></a>
<span class="sourceLineNo">2065</span>        return compare;<a name="line.2065"></a>
<span class="sourceLineNo">2066</span>      }<a name="line.2066"></a>
<span class="sourceLineNo">2067</span><a name="line.2067"></a>
<span class="sourceLineNo">2068</span>      // Compare types. Let the delete types sort ahead of puts; i.e. types<a name="line.2068"></a>
<span class="sourceLineNo">2069</span>      // of higher numbers sort before those of lesser numbers. Maximum (255)<a name="line.2069"></a>
<span class="sourceLineNo">2070</span>      // appears ahead of everything, and minimum (0) appears after<a name="line.2070"></a>
<span class="sourceLineNo">2071</span>      // everything.<a name="line.2071"></a>
<span class="sourceLineNo">2072</span>      return (0xff &amp; rtype) - (0xff &amp; ltype);<a name="line.2072"></a>
<span class="sourceLineNo">2073</span>    }<a name="line.2073"></a>
<span class="sourceLineNo">2074</span><a name="line.2074"></a>
<span class="sourceLineNo">2075</span>    protected int compareFamilies(final byte[] left, final int loffset, final int lfamilylength,<a name="line.2075"></a>
<span class="sourceLineNo">2076</span>        final byte[] right, final int roffset, final int rfamilylength) {<a name="line.2076"></a>
<span class="sourceLineNo">2077</span>      int diff = Bytes.compareTo(left, loffset, lfamilylength, right, roffset, rfamilylength);<a name="line.2077"></a>
<span class="sourceLineNo">2078</span>      return diff;<a name="line.2078"></a>
<span class="sourceLineNo">2079</span>    }<a name="line.2079"></a>
<span class="sourceLineNo">2080</span><a name="line.2080"></a>
<span class="sourceLineNo">2081</span>    protected int compareColumns(final byte[] left, final int loffset, final int lquallength,<a name="line.2081"></a>
<span class="sourceLineNo">2082</span>        final byte[] right, final int roffset, final int rquallength) {<a name="line.2082"></a>
<span class="sourceLineNo">2083</span>      int diff = Bytes.compareTo(left, loffset, lquallength, right, roffset, rquallength);<a name="line.2083"></a>
<span class="sourceLineNo">2084</span>      return diff;<a name="line.2084"></a>
<span class="sourceLineNo">2085</span>    }<a name="line.2085"></a>
<span class="sourceLineNo">2086</span>    /**<a name="line.2086"></a>
<span class="sourceLineNo">2087</span>     * Compares the row and column of two keyvalues for equality<a name="line.2087"></a>
<span class="sourceLineNo">2088</span>     * @param left<a name="line.2088"></a>
<span class="sourceLineNo">2089</span>     * @param right<a name="line.2089"></a>
<span class="sourceLineNo">2090</span>     * @return True if same row and column.<a name="line.2090"></a>
<span class="sourceLineNo">2091</span>     */<a name="line.2091"></a>
<span class="sourceLineNo">2092</span>    public boolean matchingRowColumn(final Cell left,<a name="line.2092"></a>
<span class="sourceLineNo">2093</span>        final Cell right) {<a name="line.2093"></a>
<span class="sourceLineNo">2094</span>      short lrowlength = left.getRowLength();<a name="line.2094"></a>
<span class="sourceLineNo">2095</span>      short rrowlength = right.getRowLength();<a name="line.2095"></a>
<span class="sourceLineNo">2096</span><a name="line.2096"></a>
<span class="sourceLineNo">2097</span>      // TsOffset = end of column data. just comparing Row+CF length of each<a name="line.2097"></a>
<span class="sourceLineNo">2098</span>      if ((left.getRowLength() + left.getFamilyLength() + left.getQualifierLength()) != (right<a name="line.2098"></a>
<span class="sourceLineNo">2099</span>          .getRowLength() + right.getFamilyLength() + right.getQualifierLength())) {<a name="line.2099"></a>
<span class="sourceLineNo">2100</span>        return false;<a name="line.2100"></a>
<span class="sourceLineNo">2101</span>      }<a name="line.2101"></a>
<span class="sourceLineNo">2102</span><a name="line.2102"></a>
<span class="sourceLineNo">2103</span>      if (!matchingRows(left, lrowlength, right, rrowlength)) {<a name="line.2103"></a>
<span class="sourceLineNo">2104</span>        return false;<a name="line.2104"></a>
<span class="sourceLineNo">2105</span>      }<a name="line.2105"></a>
<span class="sourceLineNo">2106</span><a name="line.2106"></a>
<span class="sourceLineNo">2107</span>      int lfoffset = left.getFamilyOffset();<a name="line.2107"></a>
<span class="sourceLineNo">2108</span>      int rfoffset = right.getFamilyOffset();<a name="line.2108"></a>
<span class="sourceLineNo">2109</span>      int lclength = left.getQualifierLength();<a name="line.2109"></a>
<span class="sourceLineNo">2110</span>      int rclength = right.getQualifierLength();<a name="line.2110"></a>
<span class="sourceLineNo">2111</span>      int lfamilylength = left.getFamilyLength();<a name="line.2111"></a>
<span class="sourceLineNo">2112</span>      int rfamilylength = right.getFamilyLength();<a name="line.2112"></a>
<span class="sourceLineNo">2113</span>      int diff = compareFamilies(left.getFamilyArray(), lfoffset, lfamilylength,<a name="line.2113"></a>
<span class="sourceLineNo">2114</span>          right.getFamilyArray(), rfoffset, rfamilylength);<a name="line.2114"></a>
<span class="sourceLineNo">2115</span>      if (diff != 0) {<a name="line.2115"></a>
<span class="sourceLineNo">2116</span>        return false;<a name="line.2116"></a>
<span class="sourceLineNo">2117</span>      } else {<a name="line.2117"></a>
<span class="sourceLineNo">2118</span>        diff = compareColumns(left.getQualifierArray(), left.getQualifierOffset(), lclength,<a name="line.2118"></a>
<span class="sourceLineNo">2119</span>            right.getQualifierArray(), right.getQualifierOffset(), rclength);<a name="line.2119"></a>
<span class="sourceLineNo">2120</span>        return diff == 0;<a name="line.2120"></a>
<span class="sourceLineNo">2121</span>      }<a name="line.2121"></a>
<span class="sourceLineNo">2122</span>    }<a name="line.2122"></a>
<span class="sourceLineNo">2123</span><a name="line.2123"></a>
<span class="sourceLineNo">2124</span>    /**<a name="line.2124"></a>
<span class="sourceLineNo">2125</span>     * Compares the row of two keyvalues for equality<a name="line.2125"></a>
<span class="sourceLineNo">2126</span>     * @param left<a name="line.2126"></a>
<span class="sourceLineNo">2127</span>     * @param right<a name="line.2127"></a>
<span class="sourceLineNo">2128</span>     * @return True if rows match.<a name="line.2128"></a>
<span class="sourceLineNo">2129</span>     */<a name="line.2129"></a>
<span class="sourceLineNo">2130</span>    public boolean matchingRows(final Cell left, final Cell right) {<a name="line.2130"></a>
<span class="sourceLineNo">2131</span>      short lrowlength = left.getRowLength();<a name="line.2131"></a>
<span class="sourceLineNo">2132</span>      short rrowlength = right.getRowLength();<a name="line.2132"></a>
<span class="sourceLineNo">2133</span>      return matchingRows(left, lrowlength, right, rrowlength);<a name="line.2133"></a>
<span class="sourceLineNo">2134</span>    }<a name="line.2134"></a>
<span class="sourceLineNo">2135</span><a name="line.2135"></a>
<span class="sourceLineNo">2136</span>    /**<a name="line.2136"></a>
<span class="sourceLineNo">2137</span>     * @param left<a name="line.2137"></a>
<span class="sourceLineNo">2138</span>     * @param lrowlength<a name="line.2138"></a>
<span class="sourceLineNo">2139</span>     * @param right<a name="line.2139"></a>
<span class="sourceLineNo">2140</span>     * @param rrowlength<a name="line.2140"></a>
<span class="sourceLineNo">2141</span>     * @return True if rows match.<a name="line.2141"></a>
<span class="sourceLineNo">2142</span>     */<a name="line.2142"></a>
<span class="sourceLineNo">2143</span>    private boolean matchingRows(final Cell left, final short lrowlength,<a name="line.2143"></a>
<span class="sourceLineNo">2144</span>        final Cell right, final short rrowlength) {<a name="line.2144"></a>
<span class="sourceLineNo">2145</span>      return lrowlength == rrowlength &amp;&amp;<a name="line.2145"></a>
<span class="sourceLineNo">2146</span>          matchingRows(left.getRowArray(), left.getRowOffset(), lrowlength,<a name="line.2146"></a>
<span class="sourceLineNo">2147</span>              right.getRowArray(), right.getRowOffset(), rrowlength);<a name="line.2147"></a>
<span class="sourceLineNo">2148</span>    }<a name="line.2148"></a>
<span class="sourceLineNo">2149</span><a name="line.2149"></a>
<span class="sourceLineNo">2150</span>    /**<a name="line.2150"></a>
<span class="sourceLineNo">2151</span>     * Compare rows. Just calls Bytes.equals, but it's good to have this encapsulated.<a name="line.2151"></a>
<span class="sourceLineNo">2152</span>     * @param left Left row array.<a name="line.2152"></a>
<span class="sourceLineNo">2153</span>     * @param loffset Left row offset.<a name="line.2153"></a>
<span class="sourceLineNo">2154</span>     * @param llength Left row length.<a name="line.2154"></a>
<span class="sourceLineNo">2155</span>     * @param right Right row array.<a name="line.2155"></a>
<span class="sourceLineNo">2156</span>     * @param roffset Right row offset.<a name="line.2156"></a>
<span class="sourceLineNo">2157</span>     * @param rlength Right row length.<a name="line.2157"></a>
<span class="sourceLineNo">2158</span>     * @return Whether rows are the same row.<a name="line.2158"></a>
<span class="sourceLineNo">2159</span>     */<a name="line.2159"></a>
<span class="sourceLineNo">2160</span>    public boolean matchingRows(final byte [] left, final int loffset, final int llength,<a name="line.2160"></a>
<span class="sourceLineNo">2161</span>        final byte [] right, final int roffset, final int rlength) {<a name="line.2161"></a>
<span class="sourceLineNo">2162</span>      return Bytes.equals(left, loffset, llength, right, roffset, rlength);<a name="line.2162"></a>
<span class="sourceLineNo">2163</span>    }<a name="line.2163"></a>
<span class="sourceLineNo">2164</span><a name="line.2164"></a>
<span class="sourceLineNo">2165</span>    public byte[] calcIndexKey(byte[] lastKeyOfPreviousBlock, byte[] firstKeyInBlock) {<a name="line.2165"></a>
<span class="sourceLineNo">2166</span>      byte[] fakeKey = getShortMidpointKey(lastKeyOfPreviousBlock, firstKeyInBlock);<a name="line.2166"></a>
<span class="sourceLineNo">2167</span>      if (compareFlatKey(fakeKey, firstKeyInBlock) &gt; 0) {<a name="line.2167"></a>
<span class="sourceLineNo">2168</span>        LOG.error("Unexpected getShortMidpointKey result, fakeKey:"<a name="line.2168"></a>
<span class="sourceLineNo">2169</span>            + Bytes.toStringBinary(fakeKey) + ", firstKeyInBlock:"<a name="line.2169"></a>
<span class="sourceLineNo">2170</span>            + Bytes.toStringBinary(firstKeyInBlock));<a name="line.2170"></a>
<span class="sourceLineNo">2171</span>        return firstKeyInBlock;<a name="line.2171"></a>
<span class="sourceLineNo">2172</span>      }<a name="line.2172"></a>
<span class="sourceLineNo">2173</span>      if (lastKeyOfPreviousBlock != null &amp;&amp; compareFlatKey(lastKeyOfPreviousBlock, fakeKey) &gt;= 0) {<a name="line.2173"></a>
<span class="sourceLineNo">2174</span>        LOG.error("Unexpected getShortMidpointKey result, lastKeyOfPreviousBlock:" +<a name="line.2174"></a>
<span class="sourceLineNo">2175</span>            Bytes.toStringBinary(lastKeyOfPreviousBlock) + ", fakeKey:" +<a name="line.2175"></a>
<span class="sourceLineNo">2176</span>            Bytes.toStringBinary(fakeKey));<a name="line.2176"></a>
<span class="sourceLineNo">2177</span>        return firstKeyInBlock;<a name="line.2177"></a>
<span class="sourceLineNo">2178</span>      }<a name="line.2178"></a>
<span class="sourceLineNo">2179</span>      return fakeKey;<a name="line.2179"></a>
<span class="sourceLineNo">2180</span>    }<a name="line.2180"></a>
<span class="sourceLineNo">2181</span><a name="line.2181"></a>
<span class="sourceLineNo">2182</span>    /**<a name="line.2182"></a>
<span class="sourceLineNo">2183</span>     * This is a HFile block index key optimization.<a name="line.2183"></a>
<span class="sourceLineNo">2184</span>     * @param leftKey<a name="line.2184"></a>
<span class="sourceLineNo">2185</span>     * @param rightKey<a name="line.2185"></a>
<span class="sourceLineNo">2186</span>     * @return 0 if equal, &amp;lt;0 if left smaller, &amp;gt;0 if right smaller<a name="line.2186"></a>
<span class="sourceLineNo">2187</span>     * @deprecated Since 0.99.2;<a name="line.2187"></a>
<span class="sourceLineNo">2188</span>     */<a name="line.2188"></a>
<span class="sourceLineNo">2189</span>    @Deprecated<a name="line.2189"></a>
<span class="sourceLineNo">2190</span>    public byte[] getShortMidpointKey(final byte[] leftKey, final byte[] rightKey) {<a name="line.2190"></a>
<span class="sourceLineNo">2191</span>      if (rightKey == null) {<a name="line.2191"></a>
<span class="sourceLineNo">2192</span>        throw new IllegalArgumentException("rightKey can not be null");<a name="line.2192"></a>
<span class="sourceLineNo">2193</span>      }<a name="line.2193"></a>
<span class="sourceLineNo">2194</span>      if (leftKey == null) {<a name="line.2194"></a>
<span class="sourceLineNo">2195</span>        return Arrays.copyOf(rightKey, rightKey.length);<a name="line.2195"></a>
<span class="sourceLineNo">2196</span>      }<a name="line.2196"></a>
<span class="sourceLineNo">2197</span>      if (compareFlatKey(leftKey, rightKey) &gt;= 0) {<a name="line.2197"></a>
<span class="sourceLineNo">2198</span>        throw new IllegalArgumentException("Unexpected input, leftKey:" + Bytes.toString(leftKey)<a name="line.2198"></a>
<span class="sourceLineNo">2199</span>          + ", rightKey:" + Bytes.toString(rightKey));<a name="line.2199"></a>
<span class="sourceLineNo">2200</span>      }<a name="line.2200"></a>
<span class="sourceLineNo">2201</span><a name="line.2201"></a>
<span class="sourceLineNo">2202</span>      short leftRowLength = Bytes.toShort(leftKey, 0);<a name="line.2202"></a>
<span class="sourceLineNo">2203</span>      short rightRowLength = Bytes.toShort(rightKey, 0);<a name="line.2203"></a>
<span class="sourceLineNo">2204</span>      int leftCommonLength = ROW_LENGTH_SIZE + FAMILY_LENGTH_SIZE + leftRowLength;<a name="line.2204"></a>
<span class="sourceLineNo">2205</span>      int rightCommonLength = ROW_LENGTH_SIZE + FAMILY_LENGTH_SIZE + rightRowLength;<a name="line.2205"></a>
<span class="sourceLineNo">2206</span>      int leftCommonLengthWithTSAndType = TIMESTAMP_TYPE_SIZE + leftCommonLength;<a name="line.2206"></a>
<span class="sourceLineNo">2207</span>      int rightCommonLengthWithTSAndType = TIMESTAMP_TYPE_SIZE + rightCommonLength;<a name="line.2207"></a>
<span class="sourceLineNo">2208</span>      int leftColumnLength = leftKey.length - leftCommonLengthWithTSAndType;<a name="line.2208"></a>
<span class="sourceLineNo">2209</span>      int rightColumnLength = rightKey.length - rightCommonLengthWithTSAndType;<a name="line.2209"></a>
<span class="sourceLineNo">2210</span>      // rows are equal<a name="line.2210"></a>
<span class="sourceLineNo">2211</span>      if (leftRowLength == rightRowLength &amp;&amp; compareRows(leftKey, ROW_LENGTH_SIZE, leftRowLength,<a name="line.2211"></a>
<span class="sourceLineNo">2212</span>        rightKey, ROW_LENGTH_SIZE, rightRowLength) == 0) {<a name="line.2212"></a>
<span class="sourceLineNo">2213</span>        // Compare family &amp; qualifier together.<a name="line.2213"></a>
<span class="sourceLineNo">2214</span>        int comparison = Bytes.compareTo(leftKey, leftCommonLength, leftColumnLength, rightKey,<a name="line.2214"></a>
<span class="sourceLineNo">2215</span>          rightCommonLength, rightColumnLength);<a name="line.2215"></a>
<span class="sourceLineNo">2216</span>        // same with "row + family + qualifier", return rightKey directly<a name="line.2216"></a>
<span class="sourceLineNo">2217</span>        if (comparison == 0) {<a name="line.2217"></a>
<span class="sourceLineNo">2218</span>          return Arrays.copyOf(rightKey, rightKey.length);<a name="line.2218"></a>
<span class="sourceLineNo">2219</span>        }<a name="line.2219"></a>
<span class="sourceLineNo">2220</span>        // "family + qualifier" are different, generate a faked key per rightKey<a name="line.2220"></a>
<span class="sourceLineNo">2221</span>        byte[] newKey = Arrays.copyOf(rightKey, rightKey.length);<a name="line.2221"></a>
<span class="sourceLineNo">2222</span>        Bytes.putLong(newKey, rightKey.length - TIMESTAMP_TYPE_SIZE, HConstants.LATEST_TIMESTAMP);<a name="line.2222"></a>
<span class="sourceLineNo">2223</span>        Bytes.putByte(newKey, rightKey.length - TYPE_SIZE, Type.Maximum.getCode());<a name="line.2223"></a>
<span class="sourceLineNo">2224</span>        return newKey;<a name="line.2224"></a>
<span class="sourceLineNo">2225</span>      }<a name="line.2225"></a>
<span class="sourceLineNo">2226</span>      // rows are different<a name="line.2226"></a>
<span class="sourceLineNo">2227</span>      short minLength = leftRowLength &lt; rightRowLength ? leftRowLength : rightRowLength;<a name="line.2227"></a>
<span class="sourceLineNo">2228</span>      short diffIdx = 0;<a name="line.2228"></a>
<span class="sourceLineNo">2229</span>      while (diffIdx &lt; minLength<a name="line.2229"></a>
<span class="sourceLineNo">2230</span>          &amp;&amp; leftKey[ROW_LENGTH_SIZE + diffIdx] == rightKey[ROW_LENGTH_SIZE + diffIdx]) {<a name="line.2230"></a>
<span class="sourceLineNo">2231</span>        diffIdx++;<a name="line.2231"></a>
<span class="sourceLineNo">2232</span>      }<a name="line.2232"></a>
<span class="sourceLineNo">2233</span>      byte[] newRowKey = null;<a name="line.2233"></a>
<span class="sourceLineNo">2234</span>      if (diffIdx &gt;= minLength) {<a name="line.2234"></a>
<span class="sourceLineNo">2235</span>        // leftKey's row is prefix of rightKey's.<a name="line.2235"></a>
<span class="sourceLineNo">2236</span>        newRowKey = new byte[diffIdx + 1];<a name="line.2236"></a>
<span class="sourceLineNo">2237</span>        System.arraycopy(rightKey, ROW_LENGTH_SIZE, newRowKey, 0, diffIdx + 1);<a name="line.2237"></a>
<span class="sourceLineNo">2238</span>      } else {<a name="line.2238"></a>
<span class="sourceLineNo">2239</span>        int diffByte = leftKey[ROW_LENGTH_SIZE + diffIdx];<a name="line.2239"></a>
<span class="sourceLineNo">2240</span>        if ((0xff &amp; diffByte) &lt; 0xff &amp;&amp; (diffByte + 1) &lt;<a name="line.2240"></a>
<span class="sourceLineNo">2241</span>            (rightKey[ROW_LENGTH_SIZE + diffIdx] &amp; 0xff)) {<a name="line.2241"></a>
<span class="sourceLineNo">2242</span>          newRowKey = new byte[diffIdx + 1];<a name="line.2242"></a>
<span class="sourceLineNo">2243</span>          System.arraycopy(leftKey, ROW_LENGTH_SIZE, newRowKey, 0, diffIdx);<a name="line.2243"></a>
<span class="sourceLineNo">2244</span>          newRowKey[diffIdx] = (byte) (diffByte + 1);<a name="line.2244"></a>
<span class="sourceLineNo">2245</span>        } else {<a name="line.2245"></a>
<span class="sourceLineNo">2246</span>          newRowKey = new byte[diffIdx + 1];<a name="line.2246"></a>
<span class="sourceLineNo">2247</span>          System.arraycopy(rightKey, ROW_LENGTH_SIZE, newRowKey, 0, diffIdx + 1);<a name="line.2247"></a>
<span class="sourceLineNo">2248</span>        }<a name="line.2248"></a>
<span class="sourceLineNo">2249</span>      }<a name="line.2249"></a>
<span class="sourceLineNo">2250</span>      return new KeyValue(newRowKey, null, null, HConstants.LATEST_TIMESTAMP,<a name="line.2250"></a>
<span class="sourceLineNo">2251</span>        Type.Maximum).getKey();<a name="line.2251"></a>
<span class="sourceLineNo">2252</span>    }<a name="line.2252"></a>
<span class="sourceLineNo">2253</span><a name="line.2253"></a>
<span class="sourceLineNo">2254</span>    @Override<a name="line.2254"></a>
<span class="sourceLineNo">2255</span>    protected Object clone() throws CloneNotSupportedException {<a name="line.2255"></a>
<span class="sourceLineNo">2256</span>      super.clone();<a name="line.2256"></a>
<span class="sourceLineNo">2257</span>      return new KVComparator();<a name="line.2257"></a>
<span class="sourceLineNo">2258</span>    }<a name="line.2258"></a>
<span class="sourceLineNo">2259</span><a name="line.2259"></a>
<span class="sourceLineNo">2260</span>  }<a name="line.2260"></a>
<span class="sourceLineNo">2261</span><a name="line.2261"></a>
<span class="sourceLineNo">2262</span>  /**<a name="line.2262"></a>
<span class="sourceLineNo">2263</span>   * @param in Where to read bytes from.  Creates a byte array to hold the KeyValue<a name="line.2263"></a>
<span class="sourceLineNo">2264</span>   * backing bytes copied from the steam.<a name="line.2264"></a>
<span class="sourceLineNo">2265</span>   * @return KeyValue created by deserializing from &lt;code&gt;in&lt;/code&gt; OR if we find a length<a name="line.2265"></a>
<span class="sourceLineNo">2266</span>   * of zero, we will return null which can be useful marking a stream as done.<a name="line.2266"></a>
<span class="sourceLineNo">2267</span>   * @throws IOException<a name="line.2267"></a>
<span class="sourceLineNo">2268</span>   */<a name="line.2268"></a>
<span class="sourceLineNo">2269</span>  public static KeyValue create(final DataInput in) throws IOException {<a name="line.2269"></a>
<span class="sourceLineNo">2270</span>    return create(in.readInt(), in);<a name="line.2270"></a>
<span class="sourceLineNo">2271</span>  }<a name="line.2271"></a>
<span class="sourceLineNo">2272</span><a name="line.2272"></a>
<span class="sourceLineNo">2273</span>  /**<a name="line.2273"></a>
<span class="sourceLineNo">2274</span>   * Create a KeyValue reading &lt;code&gt;length&lt;/code&gt; from &lt;code&gt;in&lt;/code&gt;<a name="line.2274"></a>
<span class="sourceLineNo">2275</span>   * @param length<a name="line.2275"></a>
<span class="sourceLineNo">2276</span>   * @param in<a name="line.2276"></a>
<span class="sourceLineNo">2277</span>   * @return Created KeyValue OR if we find a length of zero, we will return null which<a name="line.2277"></a>
<span class="sourceLineNo">2278</span>   * can be useful marking a stream as done.<a name="line.2278"></a>
<span class="sourceLineNo">2279</span>   * @throws IOException<a name="line.2279"></a>
<span class="sourceLineNo">2280</span>   */<a name="line.2280"></a>
<span class="sourceLineNo">2281</span>  public static KeyValue create(int length, final DataInput in) throws IOException {<a name="line.2281"></a>
<span class="sourceLineNo">2282</span><a name="line.2282"></a>
<span class="sourceLineNo">2283</span>    if (length &lt;= 0) {<a name="line.2283"></a>
<span class="sourceLineNo">2284</span>      if (length == 0) return null;<a name="line.2284"></a>
<span class="sourceLineNo">2285</span>      throw new IOException("Failed read " + length + " bytes, stream corrupt?");<a name="line.2285"></a>
<span class="sourceLineNo">2286</span>    }<a name="line.2286"></a>
<span class="sourceLineNo">2287</span><a name="line.2287"></a>
<span class="sourceLineNo">2288</span>    // This is how the old Writables.readFrom used to deserialize.  Didn't even vint.<a name="line.2288"></a>
<span class="sourceLineNo">2289</span>    byte [] bytes = new byte[length];<a name="line.2289"></a>
<span class="sourceLineNo">2290</span>    in.readFully(bytes);<a name="line.2290"></a>
<span class="sourceLineNo">2291</span>    return new KeyValue(bytes, 0, length);<a name="line.2291"></a>
<span class="sourceLineNo">2292</span>  }<a name="line.2292"></a>
<span class="sourceLineNo">2293</span><a name="line.2293"></a>
<span class="sourceLineNo">2294</span>  /**<a name="line.2294"></a>
<span class="sourceLineNo">2295</span>   * Write out a KeyValue in the manner in which we used to when KeyValue was a Writable.<a name="line.2295"></a>
<span class="sourceLineNo">2296</span>   * @param kv<a name="line.2296"></a>
<span class="sourceLineNo">2297</span>   * @param out<a name="line.2297"></a>
<span class="sourceLineNo">2298</span>   * @return Length written on stream<a name="line.2298"></a>
<span class="sourceLineNo">2299</span>   * @throws IOException<a name="line.2299"></a>
<span class="sourceLineNo">2300</span>   * @see #create(DataInput) for the inverse function<a name="line.2300"></a>
<span class="sourceLineNo">2301</span>   */<a name="line.2301"></a>
<span class="sourceLineNo">2302</span>  public static long write(final KeyValue kv, final DataOutput out) throws IOException {<a name="line.2302"></a>
<span class="sourceLineNo">2303</span>    // This is how the old Writables write used to serialize KVs.  Need to figure way to make it<a name="line.2303"></a>
<span class="sourceLineNo">2304</span>    // work for all implementations.<a name="line.2304"></a>
<span class="sourceLineNo">2305</span>    int length = kv.getLength();<a name="line.2305"></a>
<span class="sourceLineNo">2306</span>    out.writeInt(length);<a name="line.2306"></a>
<span class="sourceLineNo">2307</span>    out.write(kv.getBuffer(), kv.getOffset(), length);<a name="line.2307"></a>
<span class="sourceLineNo">2308</span>    return (long) length + Bytes.SIZEOF_INT;<a name="line.2308"></a>
<span class="sourceLineNo">2309</span>  }<a name="line.2309"></a>
<span class="sourceLineNo">2310</span><a name="line.2310"></a>
<span class="sourceLineNo">2311</span>  /**<a name="line.2311"></a>
<span class="sourceLineNo">2312</span>   * Write out a KeyValue in the manner in which we used to when KeyValue was a Writable but do<a name="line.2312"></a>
<span class="sourceLineNo">2313</span>   * not require a {@link DataOutput}, just take plain {@link OutputStream}<a name="line.2313"></a>
<span class="sourceLineNo">2314</span>   * Named &lt;code&gt;oswrite&lt;/code&gt; so does not clash with {@link #write(KeyValue, DataOutput)}<a name="line.2314"></a>
<span class="sourceLineNo">2315</span>   * @param kv<a name="line.2315"></a>
<span class="sourceLineNo">2316</span>   * @param out<a name="line.2316"></a>
<span class="sourceLineNo">2317</span>   * @param withTags<a name="line.2317"></a>
<span class="sourceLineNo">2318</span>   * @return Length written on stream<a name="line.2318"></a>
<span class="sourceLineNo">2319</span>   * @throws IOException<a name="line.2319"></a>
<span class="sourceLineNo">2320</span>   * @see #create(DataInput) for the inverse function<a name="line.2320"></a>
<span class="sourceLineNo">2321</span>   * @see #write(KeyValue, DataOutput)<a name="line.2321"></a>
<span class="sourceLineNo">2322</span>   * @see KeyValueUtil#oswrite(Cell, OutputStream, boolean)<a name="line.2322"></a>
<span class="sourceLineNo">2323</span>   * @deprecated As of release 2.0.0, this will be removed in HBase 3.0.0.<a name="line.2323"></a>
<span class="sourceLineNo">2324</span>   *             Instead use {@link #write(OutputStream, boolean)}<a name="line.2324"></a>
<span class="sourceLineNo">2325</span>   */<a name="line.2325"></a>
<span class="sourceLineNo">2326</span>  @Deprecated<a name="line.2326"></a>
<span class="sourceLineNo">2327</span>  public static long oswrite(final KeyValue kv, final OutputStream out, final boolean withTags)<a name="line.2327"></a>
<span class="sourceLineNo">2328</span>      throws IOException {<a name="line.2328"></a>
<span class="sourceLineNo">2329</span>    ByteBufferUtils.putInt(out, kv.getSerializedSize(withTags));<a name="line.2329"></a>
<span class="sourceLineNo">2330</span>    return (long) kv.write(out, withTags) + Bytes.SIZEOF_INT;<a name="line.2330"></a>
<span class="sourceLineNo">2331</span>  }<a name="line.2331"></a>
<span class="sourceLineNo">2332</span><a name="line.2332"></a>
<span class="sourceLineNo">2333</span>  @Override<a name="line.2333"></a>
<span class="sourceLineNo">2334</span>  public int write(OutputStream out, boolean withTags) throws IOException {<a name="line.2334"></a>
<span class="sourceLineNo">2335</span>    int len = getSerializedSize(withTags);<a name="line.2335"></a>
<span class="sourceLineNo">2336</span>    out.write(this.bytes, this.offset, len);<a name="line.2336"></a>
<span class="sourceLineNo">2337</span>    return len;<a name="line.2337"></a>
<span class="sourceLineNo">2338</span>  }<a name="line.2338"></a>
<span class="sourceLineNo">2339</span><a name="line.2339"></a>
<span class="sourceLineNo">2340</span>  @Override<a name="line.2340"></a>
<span class="sourceLineNo">2341</span>  public int getSerializedSize(boolean withTags) {<a name="line.2341"></a>
<span class="sourceLineNo">2342</span>    if (withTags) {<a name="line.2342"></a>
<span class="sourceLineNo">2343</span>      return this.length;<a name="line.2343"></a>
<span class="sourceLineNo">2344</span>    }<a name="line.2344"></a>
<span class="sourceLineNo">2345</span>    return this.getKeyLength() + this.getValueLength() + KEYVALUE_INFRASTRUCTURE_SIZE;<a name="line.2345"></a>
<span class="sourceLineNo">2346</span>  }<a name="line.2346"></a>
<span class="sourceLineNo">2347</span><a name="line.2347"></a>
<span class="sourceLineNo">2348</span>  @Override<a name="line.2348"></a>
<span class="sourceLineNo">2349</span>  public int getSerializedSize() {<a name="line.2349"></a>
<span class="sourceLineNo">2350</span>    return this.length;<a name="line.2350"></a>
<span class="sourceLineNo">2351</span>  }<a name="line.2351"></a>
<span class="sourceLineNo">2352</span><a name="line.2352"></a>
<span class="sourceLineNo">2353</span>  @Override<a name="line.2353"></a>
<span class="sourceLineNo">2354</span>  public void write(ByteBuffer buf, int offset) {<a name="line.2354"></a>
<span class="sourceLineNo">2355</span>    ByteBufferUtils.copyFromArrayToBuffer(buf, offset, this.bytes, this.offset, this.length);<a name="line.2355"></a>
<span class="sourceLineNo">2356</span>  }<a name="line.2356"></a>
<span class="sourceLineNo">2357</span><a name="line.2357"></a>
<span class="sourceLineNo">2358</span>  /**<a name="line.2358"></a>
<span class="sourceLineNo">2359</span>   * Avoids redundant comparisons for better performance.<a name="line.2359"></a>
<span class="sourceLineNo">2360</span>   *<a name="line.2360"></a>
<span class="sourceLineNo">2361</span>   * TODO get rid of this wart<a name="line.2361"></a>
<span class="sourceLineNo">2362</span>   */<a name="line.2362"></a>
<span class="sourceLineNo">2363</span>  public interface SamePrefixComparator&lt;T&gt; {<a name="line.2363"></a>
<span class="sourceLineNo">2364</span>    /**<a name="line.2364"></a>
<span class="sourceLineNo">2365</span>     * Compare two keys assuming that the first n bytes are the same.<a name="line.2365"></a>
<span class="sourceLineNo">2366</span>     * @param commonPrefix How many bytes are the same.<a name="line.2366"></a>
<span class="sourceLineNo">2367</span>     */<a name="line.2367"></a>
<span class="sourceLineNo">2368</span>    int compareIgnoringPrefix(int commonPrefix, byte[] left, int loffset, int llength,<a name="line.2368"></a>
<span class="sourceLineNo">2369</span>        byte[] right, int roffset, int rlength<a name="line.2369"></a>
<span class="sourceLineNo">2370</span>    );<a name="line.2370"></a>
<span class="sourceLineNo">2371</span>  }<a name="line.2371"></a>
<span class="sourceLineNo">2372</span><a name="line.2372"></a>
<span class="sourceLineNo">2373</span>  /**<a name="line.2373"></a>
<span class="sourceLineNo">2374</span>   * HeapSize implementation<a name="line.2374"></a>
<span class="sourceLineNo">2375</span>   *<a name="line.2375"></a>
<span class="sourceLineNo">2376</span>   * We do not count the bytes in the rowCache because it should be empty for a KeyValue in the<a name="line.2376"></a>
<span class="sourceLineNo">2377</span>   * MemStore.<a name="line.2377"></a>
<span class="sourceLineNo">2378</span>   */<a name="line.2378"></a>
<span class="sourceLineNo">2379</span>  @Override<a name="line.2379"></a>
<span class="sourceLineNo">2380</span>  public long heapSize() {<a name="line.2380"></a>
<span class="sourceLineNo">2381</span>    /*<a name="line.2381"></a>
<span class="sourceLineNo">2382</span>     * Deep object overhead for this KV consists of two parts. The first part is the KV object<a name="line.2382"></a>
<span class="sourceLineNo">2383</span>     * itself, while the second part is the backing byte[]. We will only count the array overhead<a name="line.2383"></a>
<span class="sourceLineNo">2384</span>     * from the byte[] only if this is the first KV in there.<a name="line.2384"></a>
<span class="sourceLineNo">2385</span>     */<a name="line.2385"></a>
<span class="sourceLineNo">2386</span>    return ClassSize.align(FIXED_OVERHEAD) +<a name="line.2386"></a>
<span class="sourceLineNo">2387</span>        (offset == 0<a name="line.2387"></a>
<span class="sourceLineNo">2388</span>          ? ClassSize.sizeOfByteArray(length)  // count both length and object overhead<a name="line.2388"></a>
<span class="sourceLineNo">2389</span>          : length);                           // only count the number of bytes<a name="line.2389"></a>
<span class="sourceLineNo">2390</span>  }<a name="line.2390"></a>
<span class="sourceLineNo">2391</span><a name="line.2391"></a>
<span class="sourceLineNo">2392</span>  /**<a name="line.2392"></a>
<span class="sourceLineNo">2393</span>   * A simple form of KeyValue that creates a keyvalue with only the key part of the byte[]<a name="line.2393"></a>
<span class="sourceLineNo">2394</span>   * Mainly used in places where we need to compare two cells.  Avoids copying of bytes<a name="line.2394"></a>
<span class="sourceLineNo">2395</span>   * In places like block index keys, we need to compare the key byte[] with a cell.<a name="line.2395"></a>
<span class="sourceLineNo">2396</span>   * Hence create a Keyvalue(aka Cell) that would help in comparing as two cells<a name="line.2396"></a>
<span class="sourceLineNo">2397</span>   */<a name="line.2397"></a>
<span class="sourceLineNo">2398</span>  public static class KeyOnlyKeyValue extends KeyValue {<a name="line.2398"></a>
<span class="sourceLineNo">2399</span>    private short rowLen = -1;<a name="line.2399"></a>
<span class="sourceLineNo">2400</span>    public KeyOnlyKeyValue() {<a name="line.2400"></a>
<span class="sourceLineNo">2401</span><a name="line.2401"></a>
<span class="sourceLineNo">2402</span>    }<a name="line.2402"></a>
<span class="sourceLineNo">2403</span>    public KeyOnlyKeyValue(byte[] b) {<a name="line.2403"></a>
<span class="sourceLineNo">2404</span>      this(b, 0, b.length);<a name="line.2404"></a>
<span class="sourceLineNo">2405</span>    }<a name="line.2405"></a>
<span class="sourceLineNo">2406</span><a name="line.2406"></a>
<span class="sourceLineNo">2407</span>    public KeyOnlyKeyValue(byte[] b, int offset, int length) {<a name="line.2407"></a>
<span class="sourceLineNo">2408</span>      this.bytes = b;<a name="line.2408"></a>
<span class="sourceLineNo">2409</span>      this.length = length;<a name="line.2409"></a>
<span class="sourceLineNo">2410</span>      this.offset = offset;<a name="line.2410"></a>
<span class="sourceLineNo">2411</span>      this.rowLen = Bytes.toShort(this.bytes, this.offset);<a name="line.2411"></a>
<span class="sourceLineNo">2412</span>    }<a name="line.2412"></a>
<span class="sourceLineNo">2413</span><a name="line.2413"></a>
<span class="sourceLineNo">2414</span>    public void set(KeyOnlyKeyValue keyOnlyKeyValue) {<a name="line.2414"></a>
<span class="sourceLineNo">2415</span>      this.bytes = keyOnlyKeyValue.bytes;<a name="line.2415"></a>
<span class="sourceLineNo">2416</span>      this.length = keyOnlyKeyValue.length;<a name="line.2416"></a>
<span class="sourceLineNo">2417</span>      this.offset = keyOnlyKeyValue.offset;<a name="line.2417"></a>
<span class="sourceLineNo">2418</span>      this.rowLen = keyOnlyKeyValue.rowLen;<a name="line.2418"></a>
<span class="sourceLineNo">2419</span>    }<a name="line.2419"></a>
<span class="sourceLineNo">2420</span><a name="line.2420"></a>
<span class="sourceLineNo">2421</span>    public void clear() {<a name="line.2421"></a>
<span class="sourceLineNo">2422</span>      rowLen = -1;<a name="line.2422"></a>
<span class="sourceLineNo">2423</span>      bytes = null;<a name="line.2423"></a>
<span class="sourceLineNo">2424</span>      offset = 0;<a name="line.2424"></a>
<span class="sourceLineNo">2425</span>      length = 0;<a name="line.2425"></a>
<span class="sourceLineNo">2426</span>    }<a name="line.2426"></a>
<span class="sourceLineNo">2427</span><a name="line.2427"></a>
<span class="sourceLineNo">2428</span>    @Override<a name="line.2428"></a>
<span class="sourceLineNo">2429</span>    public int getKeyOffset() {<a name="line.2429"></a>
<span class="sourceLineNo">2430</span>      return this.offset;<a name="line.2430"></a>
<span class="sourceLineNo">2431</span>    }<a name="line.2431"></a>
<span class="sourceLineNo">2432</span><a name="line.2432"></a>
<span class="sourceLineNo">2433</span>    /**<a name="line.2433"></a>
<span class="sourceLineNo">2434</span>     * A setter that helps to avoid object creation every time and whenever<a name="line.2434"></a>
<span class="sourceLineNo">2435</span>     * there is a need to create new KeyOnlyKeyValue.<a name="line.2435"></a>
<span class="sourceLineNo">2436</span>     * @param key<a name="line.2436"></a>
<span class="sourceLineNo">2437</span>     * @param offset<a name="line.2437"></a>
<span class="sourceLineNo">2438</span>     * @param length<a name="line.2438"></a>
<span class="sourceLineNo">2439</span>     */<a name="line.2439"></a>
<span class="sourceLineNo">2440</span>    public void setKey(byte[] key, int offset, int length) {<a name="line.2440"></a>
<span class="sourceLineNo">2441</span>      this.bytes = key;<a name="line.2441"></a>
<span class="sourceLineNo">2442</span>      this.offset = offset;<a name="line.2442"></a>
<span class="sourceLineNo">2443</span>      this.length = length;<a name="line.2443"></a>
<span class="sourceLineNo">2444</span>      this.rowLen = Bytes.toShort(this.bytes, this.offset);<a name="line.2444"></a>
<span class="sourceLineNo">2445</span>    }<a name="line.2445"></a>
<span class="sourceLineNo">2446</span><a name="line.2446"></a>
<span class="sourceLineNo">2447</span>    @Override<a name="line.2447"></a>
<span class="sourceLineNo">2448</span>    public byte[] getKey() {<a name="line.2448"></a>
<span class="sourceLineNo">2449</span>      int keylength = getKeyLength();<a name="line.2449"></a>
<span class="sourceLineNo">2450</span>      byte[] key = new byte[keylength];<a name="line.2450"></a>
<span class="sourceLineNo">2451</span>      System.arraycopy(this.bytes, getKeyOffset(), key, 0, keylength);<a name="line.2451"></a>
<span class="sourceLineNo">2452</span>      return key;<a name="line.2452"></a>
<span class="sourceLineNo">2453</span>    }<a name="line.2453"></a>
<span class="sourceLineNo">2454</span><a name="line.2454"></a>
<span class="sourceLineNo">2455</span>    @Override<a name="line.2455"></a>
<span class="sourceLineNo">2456</span>    public byte[] getRowArray() {<a name="line.2456"></a>
<span class="sourceLineNo">2457</span>      return bytes;<a name="line.2457"></a>
<span class="sourceLineNo">2458</span>    }<a name="line.2458"></a>
<span class="sourceLineNo">2459</span><a name="line.2459"></a>
<span class="sourceLineNo">2460</span>    @Override<a name="line.2460"></a>
<span class="sourceLineNo">2461</span>    public int getRowOffset() {<a name="line.2461"></a>
<span class="sourceLineNo">2462</span>      return getKeyOffset() + Bytes.SIZEOF_SHORT;<a name="line.2462"></a>
<span class="sourceLineNo">2463</span>    }<a name="line.2463"></a>
<span class="sourceLineNo">2464</span><a name="line.2464"></a>
<span class="sourceLineNo">2465</span>    @Override<a name="line.2465"></a>
<span class="sourceLineNo">2466</span>    public byte[] getFamilyArray() {<a name="line.2466"></a>
<span class="sourceLineNo">2467</span>      return bytes;<a name="line.2467"></a>
<span class="sourceLineNo">2468</span>    }<a name="line.2468"></a>
<span class="sourceLineNo">2469</span><a name="line.2469"></a>
<span class="sourceLineNo">2470</span>    @Override<a name="line.2470"></a>
<span class="sourceLineNo">2471</span>    public byte getFamilyLength() {<a name="line.2471"></a>
<span class="sourceLineNo">2472</span>      return this.bytes[getFamilyOffset() - 1];<a name="line.2472"></a>
<span class="sourceLineNo">2473</span>    }<a name="line.2473"></a>
<span class="sourceLineNo">2474</span><a name="line.2474"></a>
<span class="sourceLineNo">2475</span>    int getFamilyLengthPosition(int rowLength) {<a name="line.2475"></a>
<span class="sourceLineNo">2476</span>      return this.offset + Bytes.SIZEOF_SHORT + rowLength;<a name="line.2476"></a>
<span class="sourceLineNo">2477</span>    }<a name="line.2477"></a>
<span class="sourceLineNo">2478</span><a name="line.2478"></a>
<span class="sourceLineNo">2479</span>    @Override<a name="line.2479"></a>
<span class="sourceLineNo">2480</span>    public int getFamilyOffset() {<a name="line.2480"></a>
<span class="sourceLineNo">2481</span>      return this.offset + Bytes.SIZEOF_SHORT + getRowLength() + Bytes.SIZEOF_BYTE;<a name="line.2481"></a>
<span class="sourceLineNo">2482</span>    }<a name="line.2482"></a>
<span class="sourceLineNo">2483</span><a name="line.2483"></a>
<span class="sourceLineNo">2484</span>    @Override<a name="line.2484"></a>
<span class="sourceLineNo">2485</span>    public byte[] getQualifierArray() {<a name="line.2485"></a>
<span class="sourceLineNo">2486</span>      return bytes;<a name="line.2486"></a>
<span class="sourceLineNo">2487</span>    }<a name="line.2487"></a>
<span class="sourceLineNo">2488</span><a name="line.2488"></a>
<span class="sourceLineNo">2489</span>    @Override<a name="line.2489"></a>
<span class="sourceLineNo">2490</span>    public int getQualifierLength() {<a name="line.2490"></a>
<span class="sourceLineNo">2491</span>      return getQualifierLength(getRowLength(), getFamilyLength());<a name="line.2491"></a>
<span class="sourceLineNo">2492</span>    }<a name="line.2492"></a>
<span class="sourceLineNo">2493</span><a name="line.2493"></a>
<span class="sourceLineNo">2494</span>    @Override<a name="line.2494"></a>
<span class="sourceLineNo">2495</span>    public int getQualifierOffset() {<a name="line.2495"></a>
<span class="sourceLineNo">2496</span>      return getFamilyOffset() + getFamilyLength();<a name="line.2496"></a>
<span class="sourceLineNo">2497</span>    }<a name="line.2497"></a>
<span class="sourceLineNo">2498</span><a name="line.2498"></a>
<span class="sourceLineNo">2499</span>    @Override<a name="line.2499"></a>
<span class="sourceLineNo">2500</span>    public int getKeyLength() {<a name="line.2500"></a>
<span class="sourceLineNo">2501</span>      return length;<a name="line.2501"></a>
<span class="sourceLineNo">2502</span>    }<a name="line.2502"></a>
<span class="sourceLineNo">2503</span><a name="line.2503"></a>
<span class="sourceLineNo">2504</span>    @Override<a name="line.2504"></a>
<span class="sourceLineNo">2505</span>    public short getRowLength() {<a name="line.2505"></a>
<span class="sourceLineNo">2506</span>      return rowLen;<a name="line.2506"></a>
<span class="sourceLineNo">2507</span>    }<a name="line.2507"></a>
<span class="sourceLineNo">2508</span><a name="line.2508"></a>
<span class="sourceLineNo">2509</span>    @Override<a name="line.2509"></a>
<span class="sourceLineNo">2510</span>    public byte getTypeByte() {<a name="line.2510"></a>
<span class="sourceLineNo">2511</span>      return getTypeByte(getKeyLength());<a name="line.2511"></a>
<span class="sourceLineNo">2512</span>    }<a name="line.2512"></a>
<span class="sourceLineNo">2513</span><a name="line.2513"></a>
<span class="sourceLineNo">2514</span>    byte getTypeByte(int keyLength) {<a name="line.2514"></a>
<span class="sourceLineNo">2515</span>      return this.bytes[this.offset + keyLength - 1];<a name="line.2515"></a>
<span class="sourceLineNo">2516</span>    }<a name="line.2516"></a>
<span class="sourceLineNo">2517</span><a name="line.2517"></a>
<span class="sourceLineNo">2518</span><a name="line.2518"></a>
<span class="sourceLineNo">2519</span>    private int getQualifierLength(int rlength, int flength) {<a name="line.2519"></a>
<span class="sourceLineNo">2520</span>      return getKeyLength() - (int) getKeyDataStructureSize(rlength, flength, 0);<a name="line.2520"></a>
<span class="sourceLineNo">2521</span>    }<a name="line.2521"></a>
<span class="sourceLineNo">2522</span><a name="line.2522"></a>
<span class="sourceLineNo">2523</span>    @Override<a name="line.2523"></a>
<span class="sourceLineNo">2524</span>    public long getTimestamp() {<a name="line.2524"></a>
<span class="sourceLineNo">2525</span>      int tsOffset = getTimestampOffset();<a name="line.2525"></a>
<span class="sourceLineNo">2526</span>      return Bytes.toLong(this.bytes, tsOffset);<a name="line.2526"></a>
<span class="sourceLineNo">2527</span>    }<a name="line.2527"></a>
<span class="sourceLineNo">2528</span><a name="line.2528"></a>
<span class="sourceLineNo">2529</span>    @Override<a name="line.2529"></a>
<span class="sourceLineNo">2530</span>    public int getTimestampOffset() {<a name="line.2530"></a>
<span class="sourceLineNo">2531</span>      return getKeyOffset() + getKeyLength() - TIMESTAMP_TYPE_SIZE;<a name="line.2531"></a>
<span class="sourceLineNo">2532</span>    }<a name="line.2532"></a>
<span class="sourceLineNo">2533</span><a name="line.2533"></a>
<span class="sourceLineNo">2534</span>    @Override<a name="line.2534"></a>
<span class="sourceLineNo">2535</span>    public byte[] getTagsArray() {<a name="line.2535"></a>
<span class="sourceLineNo">2536</span>      return HConstants.EMPTY_BYTE_ARRAY;<a name="line.2536"></a>
<span class="sourceLineNo">2537</span>    }<a name="line.2537"></a>
<span class="sourceLineNo">2538</span><a name="line.2538"></a>
<span class="sourceLineNo">2539</span>    @Override<a name="line.2539"></a>
<span class="sourceLineNo">2540</span>    public int getTagsOffset() {<a name="line.2540"></a>
<span class="sourceLineNo">2541</span>      return 0;<a name="line.2541"></a>
<span class="sourceLineNo">2542</span>    }<a name="line.2542"></a>
<span class="sourceLineNo">2543</span><a name="line.2543"></a>
<span class="sourceLineNo">2544</span>    @Override<a name="line.2544"></a>
<span class="sourceLineNo">2545</span>    public byte[] getValueArray() {<a name="line.2545"></a>
<span class="sourceLineNo">2546</span>      throw new IllegalArgumentException("KeyOnlyKeyValue does not work with values.");<a name="line.2546"></a>
<span class="sourceLineNo">2547</span>    }<a name="line.2547"></a>
<span class="sourceLineNo">2548</span><a name="line.2548"></a>
<span class="sourceLineNo">2549</span>    @Override<a name="line.2549"></a>
<span class="sourceLineNo">2550</span>    public int getValueOffset() {<a name="line.2550"></a>
<span class="sourceLineNo">2551</span>      throw new IllegalArgumentException("KeyOnlyKeyValue does not work with values.");<a name="line.2551"></a>
<span class="sourceLineNo">2552</span>    }<a name="line.2552"></a>
<span class="sourceLineNo">2553</span><a name="line.2553"></a>
<span class="sourceLineNo">2554</span>    @Override<a name="line.2554"></a>
<span class="sourceLineNo">2555</span>    public int getValueLength() {<a name="line.2555"></a>
<span class="sourceLineNo">2556</span>      throw new IllegalArgumentException("KeyOnlyKeyValue does not work with values.");<a name="line.2556"></a>
<span class="sourceLineNo">2557</span>    }<a name="line.2557"></a>
<span class="sourceLineNo">2558</span><a name="line.2558"></a>
<span class="sourceLineNo">2559</span>    @Override<a name="line.2559"></a>
<span class="sourceLineNo">2560</span>    public int getTagsLength() {<a name="line.2560"></a>
<span class="sourceLineNo">2561</span>      return 0;<a name="line.2561"></a>
<span class="sourceLineNo">2562</span>    }<a name="line.2562"></a>
<span class="sourceLineNo">2563</span><a name="line.2563"></a>
<span class="sourceLineNo">2564</span>    @Override<a name="line.2564"></a>
<span class="sourceLineNo">2565</span>    public String toString() {<a name="line.2565"></a>
<span class="sourceLineNo">2566</span>      if (this.bytes == null || this.bytes.length == 0) {<a name="line.2566"></a>
<span class="sourceLineNo">2567</span>        return "empty";<a name="line.2567"></a>
<span class="sourceLineNo">2568</span>      }<a name="line.2568"></a>
<span class="sourceLineNo">2569</span>      return keyToString(this.bytes, this.offset, getKeyLength()) + "/vlen=0/mvcc=0";<a name="line.2569"></a>
<span class="sourceLineNo">2570</span>    }<a name="line.2570"></a>
<span class="sourceLineNo">2571</span><a name="line.2571"></a>
<span class="sourceLineNo">2572</span>    @Override<a name="line.2572"></a>
<span class="sourceLineNo">2573</span>    public int hashCode() {<a name="line.2573"></a>
<span class="sourceLineNo">2574</span>      return super.hashCode();<a name="line.2574"></a>
<span class="sourceLineNo">2575</span>    }<a name="line.2575"></a>
<span class="sourceLineNo">2576</span><a name="line.2576"></a>
<span class="sourceLineNo">2577</span>    @Override<a name="line.2577"></a>
<span class="sourceLineNo">2578</span>    public boolean equals(Object other) {<a name="line.2578"></a>
<span class="sourceLineNo">2579</span>      return super.equals(other);<a name="line.2579"></a>
<span class="sourceLineNo">2580</span>    }<a name="line.2580"></a>
<span class="sourceLineNo">2581</span><a name="line.2581"></a>
<span class="sourceLineNo">2582</span>    @Override<a name="line.2582"></a>
<span class="sourceLineNo">2583</span>    public long heapSize() {<a name="line.2583"></a>
<span class="sourceLineNo">2584</span>      return super.heapSize() + Bytes.SIZEOF_SHORT;<a name="line.2584"></a>
<span class="sourceLineNo">2585</span>    }<a name="line.2585"></a>
<span class="sourceLineNo">2586</span><a name="line.2586"></a>
<span class="sourceLineNo">2587</span>    @Override<a name="line.2587"></a>
<span class="sourceLineNo">2588</span>    public int write(OutputStream out, boolean withTags) throws IOException {<a name="line.2588"></a>
<span class="sourceLineNo">2589</span>      // This type of Cell is used only to maintain some internal states. We never allow this type<a name="line.2589"></a>
<span class="sourceLineNo">2590</span>      // of Cell to be returned back over the RPC<a name="line.2590"></a>
<span class="sourceLineNo">2591</span>      throw new IllegalStateException("A reader should never return this type of a Cell");<a name="line.2591"></a>
<span class="sourceLineNo">2592</span>    }<a name="line.2592"></a>
<span class="sourceLineNo">2593</span>  }<a name="line.2593"></a>
<span class="sourceLineNo">2594</span><a name="line.2594"></a>
<span class="sourceLineNo">2595</span>  @Override<a name="line.2595"></a>
<span class="sourceLineNo">2596</span>  public ExtendedCell deepClone() {<a name="line.2596"></a>
<span class="sourceLineNo">2597</span>    byte[] copy = Bytes.copy(this.bytes, this.offset, this.length);<a name="line.2597"></a>
<span class="sourceLineNo">2598</span>    KeyValue kv = new KeyValue(copy, 0, copy.length);<a name="line.2598"></a>
<span class="sourceLineNo">2599</span>    kv.setSequenceId(this.getSequenceId());<a name="line.2599"></a>
<span class="sourceLineNo">2600</span>    return kv;<a name="line.2600"></a>
<span class="sourceLineNo">2601</span>  }<a name="line.2601"></a>
<span class="sourceLineNo">2602</span>}<a name="line.2602"></a>




























































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