<!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> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
<span class="sourceLineNo">009</span> *<a name="line.9"></a>
<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
<span class="sourceLineNo">011</span> *<a name="line.11"></a>
<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
<span class="sourceLineNo">017</span> */<a name="line.17"></a>
<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.regionserver.wal;<a name="line.18"></a>
<span class="sourceLineNo">019</span><a name="line.19"></a>
<span class="sourceLineNo">020</span>import java.io.ByteArrayOutputStream;<a name="line.20"></a>
<span class="sourceLineNo">021</span>import java.io.IOException;<a name="line.21"></a>
<span class="sourceLineNo">022</span>import java.io.InputStream;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import java.io.OutputStream;<a name="line.23"></a>
<span class="sourceLineNo">024</span><a name="line.24"></a>
<span class="sourceLineNo">025</span>import org.apache.hadoop.conf.Configuration;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.Cell;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.PrivateCellUtil;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.KeyValueUtil;<a name="line.30"></a>
<span class="sourceLineNo">031</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.31"></a>
<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.codec.BaseDecoder;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.codec.BaseEncoder;<a name="line.33"></a>
<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.codec.Codec;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.codec.KeyValueCodecWithTags;<a name="line.35"></a>
<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.io.ByteBuffInputStream;<a name="line.36"></a>
<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.io.ByteBufferWriter;<a name="line.37"></a>
<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.io.ByteBufferWriterOutputStream;<a name="line.38"></a>
<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.io.util.Dictionary;<a name="line.39"></a>
<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.io.util.StreamUtils;<a name="line.40"></a>
<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.41"></a>
<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.util.ByteBufferUtils;<a name="line.42"></a>
<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.43"></a>
<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.util.ReflectionUtils;<a name="line.44"></a>
<span class="sourceLineNo">045</span>import org.apache.hadoop.io.IOUtils;<a name="line.45"></a>
<span class="sourceLineNo">046</span><a name="line.46"></a>
<span class="sourceLineNo">047</span>import org.apache.hbase.thirdparty.com.google.protobuf.ByteString;<a name="line.47"></a>
<span class="sourceLineNo">048</span>import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;<a name="line.48"></a>
<span class="sourceLineNo">049</span><a name="line.49"></a>
<span class="sourceLineNo">050</span><a name="line.50"></a>
<span class="sourceLineNo">051</span>/**<a name="line.51"></a>
<span class="sourceLineNo">052</span> * Compression in this class is lifted off Compressor/KeyValueCompression.<a name="line.52"></a>
<span class="sourceLineNo">053</span> * This is a pure coincidence... they are independent and don't have to be compatible.<a name="line.53"></a>
<span class="sourceLineNo">054</span> *<a name="line.54"></a>
<span class="sourceLineNo">055</span> * This codec is used at server side for writing cells to WAL as well as for sending edits<a name="line.55"></a>
<span class="sourceLineNo">056</span> * as part of the distributed splitting process.<a name="line.56"></a>
<span class="sourceLineNo">057</span> */<a name="line.57"></a>
<span class="sourceLineNo">058</span>@InterfaceAudience.LimitedPrivate({HBaseInterfaceAudience.COPROC,<a name="line.58"></a>
<span class="sourceLineNo">059</span>  HBaseInterfaceAudience.PHOENIX, HBaseInterfaceAudience.CONFIG})<a name="line.59"></a>
<span class="sourceLineNo">060</span>public class WALCellCodec implements Codec {<a name="line.60"></a>
<span class="sourceLineNo">061</span>  /** Configuration key for the class to use when encoding cells in the WAL */<a name="line.61"></a>
<span class="sourceLineNo">062</span>  public static final String WAL_CELL_CODEC_CLASS_KEY = "hbase.regionserver.wal.codec";<a name="line.62"></a>
<span class="sourceLineNo">063</span><a name="line.63"></a>
<span class="sourceLineNo">064</span>  protected final CompressionContext compression;<a name="line.64"></a>
<span class="sourceLineNo">065</span><a name="line.65"></a>
<span class="sourceLineNo">066</span>  /**<a name="line.66"></a>
<span class="sourceLineNo">067</span>   * &lt;b&gt;All subclasses must implement a no argument constructor&lt;/b&gt;<a name="line.67"></a>
<span class="sourceLineNo">068</span>   */<a name="line.68"></a>
<span class="sourceLineNo">069</span>  public WALCellCodec() {<a name="line.69"></a>
<span class="sourceLineNo">070</span>    this.compression = null;<a name="line.70"></a>
<span class="sourceLineNo">071</span>  }<a name="line.71"></a>
<span class="sourceLineNo">072</span><a name="line.72"></a>
<span class="sourceLineNo">073</span>  /**<a name="line.73"></a>
<span class="sourceLineNo">074</span>   * Default constructor - &lt;b&gt;all subclasses must implement a constructor with this signature &lt;/b&gt;<a name="line.74"></a>
<span class="sourceLineNo">075</span>   * if they are to be dynamically loaded from the {@link Configuration}.<a name="line.75"></a>
<span class="sourceLineNo">076</span>   * @param conf configuration to configure &lt;tt&gt;this&lt;/tt&gt;<a name="line.76"></a>
<span class="sourceLineNo">077</span>   * @param compression compression the codec should support, can be &lt;tt&gt;null&lt;/tt&gt; to indicate no<a name="line.77"></a>
<span class="sourceLineNo">078</span>   *          compression<a name="line.78"></a>
<span class="sourceLineNo">079</span>   */<a name="line.79"></a>
<span class="sourceLineNo">080</span>  public WALCellCodec(Configuration conf, CompressionContext compression) {<a name="line.80"></a>
<span class="sourceLineNo">081</span>    this.compression = compression;<a name="line.81"></a>
<span class="sourceLineNo">082</span>  }<a name="line.82"></a>
<span class="sourceLineNo">083</span><a name="line.83"></a>
<span class="sourceLineNo">084</span>  public static Class&lt;?&gt; getWALCellCodecClass(Configuration conf) {<a name="line.84"></a>
<span class="sourceLineNo">085</span>    return conf.getClass(WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class);<a name="line.85"></a>
<span class="sourceLineNo">086</span>  }<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>   * Create and setup a {@link WALCellCodec} from the {@code cellCodecClsName} and<a name="line.89"></a>
<span class="sourceLineNo">090</span>   * CompressionContext, if {@code cellCodecClsName} is specified.<a name="line.90"></a>
<span class="sourceLineNo">091</span>   * Otherwise Cell Codec classname is read from {@link Configuration}.<a name="line.91"></a>
<span class="sourceLineNo">092</span>   * Fully prepares the codec for use.<a name="line.92"></a>
<span class="sourceLineNo">093</span>   * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.93"></a>
<span class="sourceLineNo">094</span>   *          uses a {@link WALCellCodec}.<a name="line.94"></a>
<span class="sourceLineNo">095</span>   * @param cellCodecClsName name of codec<a name="line.95"></a>
<span class="sourceLineNo">096</span>   * @param compression compression the codec should use<a name="line.96"></a>
<span class="sourceLineNo">097</span>   * @return a {@link WALCellCodec} ready for use.<a name="line.97"></a>
<span class="sourceLineNo">098</span>   * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.98"></a>
<span class="sourceLineNo">099</span>   */<a name="line.99"></a>
<span class="sourceLineNo">100</span><a name="line.100"></a>
<span class="sourceLineNo">101</span>  public static WALCellCodec create(Configuration conf, String cellCodecClsName,<a name="line.101"></a>
<span class="sourceLineNo">102</span>      CompressionContext compression) throws UnsupportedOperationException {<a name="line.102"></a>
<span class="sourceLineNo">103</span>    if (cellCodecClsName == null) {<a name="line.103"></a>
<span class="sourceLineNo">104</span>      cellCodecClsName = getWALCellCodecClass(conf).getName();<a name="line.104"></a>
<span class="sourceLineNo">105</span>    }<a name="line.105"></a>
<span class="sourceLineNo">106</span>    return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.106"></a>
<span class="sourceLineNo">107</span>        { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.107"></a>
<span class="sourceLineNo">108</span>  }<a name="line.108"></a>
<span class="sourceLineNo">109</span><a name="line.109"></a>
<span class="sourceLineNo">110</span>  /**<a name="line.110"></a>
<span class="sourceLineNo">111</span>   * Create and setup a {@link WALCellCodec} from the<a name="line.111"></a>
<span class="sourceLineNo">112</span>   * CompressionContext.<a name="line.112"></a>
<span class="sourceLineNo">113</span>   * Cell Codec classname is read from {@link Configuration}.<a name="line.113"></a>
<span class="sourceLineNo">114</span>   * Fully prepares the codec for use.<a name="line.114"></a>
<span class="sourceLineNo">115</span>   * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.115"></a>
<span class="sourceLineNo">116</span>   *          uses a {@link WALCellCodec}.<a name="line.116"></a>
<span class="sourceLineNo">117</span>   * @param compression compression the codec should use<a name="line.117"></a>
<span class="sourceLineNo">118</span>   * @return a {@link WALCellCodec} ready for use.<a name="line.118"></a>
<span class="sourceLineNo">119</span>   * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.119"></a>
<span class="sourceLineNo">120</span>   */<a name="line.120"></a>
<span class="sourceLineNo">121</span>  public static WALCellCodec create(Configuration conf,<a name="line.121"></a>
<span class="sourceLineNo">122</span>      CompressionContext compression) throws UnsupportedOperationException {<a name="line.122"></a>
<span class="sourceLineNo">123</span>    String cellCodecClsName = getWALCellCodecClass(conf).getName();<a name="line.123"></a>
<span class="sourceLineNo">124</span>    return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.124"></a>
<span class="sourceLineNo">125</span>        { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.125"></a>
<span class="sourceLineNo">126</span>  }<a name="line.126"></a>
<span class="sourceLineNo">127</span><a name="line.127"></a>
<span class="sourceLineNo">128</span>  public interface ByteStringCompressor {<a name="line.128"></a>
<span class="sourceLineNo">129</span>    ByteString compress(byte[] data, Enum dictIndex) throws IOException;<a name="line.129"></a>
<span class="sourceLineNo">130</span>  }<a name="line.130"></a>
<span class="sourceLineNo">131</span><a name="line.131"></a>
<span class="sourceLineNo">132</span>  public interface ByteStringUncompressor {<a name="line.132"></a>
<span class="sourceLineNo">133</span>    byte[] uncompress(ByteString data, Enum dictIndex) throws IOException;<a name="line.133"></a>
<span class="sourceLineNo">134</span>  }<a name="line.134"></a>
<span class="sourceLineNo">135</span><a name="line.135"></a>
<span class="sourceLineNo">136</span>  static class StatelessUncompressor implements ByteStringUncompressor {<a name="line.136"></a>
<span class="sourceLineNo">137</span>    CompressionContext compressionContext;<a name="line.137"></a>
<span class="sourceLineNo">138</span><a name="line.138"></a>
<span class="sourceLineNo">139</span>    public StatelessUncompressor(CompressionContext compressionContext) {<a name="line.139"></a>
<span class="sourceLineNo">140</span>      this.compressionContext = compressionContext;<a name="line.140"></a>
<span class="sourceLineNo">141</span>    }<a name="line.141"></a>
<span class="sourceLineNo">142</span><a name="line.142"></a>
<span class="sourceLineNo">143</span>    @Override<a name="line.143"></a>
<span class="sourceLineNo">144</span>    public byte[] uncompress(ByteString data, Enum dictIndex) throws IOException {<a name="line.144"></a>
<span class="sourceLineNo">145</span>      return WALCellCodec.uncompressByteString(data, compressionContext.getDictionary(dictIndex));<a name="line.145"></a>
<span class="sourceLineNo">146</span>    }<a name="line.146"></a>
<span class="sourceLineNo">147</span>  }<a name="line.147"></a>
<span class="sourceLineNo">148</span><a name="line.148"></a>
<span class="sourceLineNo">149</span>  static class BaosAndCompressor extends ByteArrayOutputStream implements ByteStringCompressor {<a name="line.149"></a>
<span class="sourceLineNo">150</span>    private CompressionContext compressionContext;<a name="line.150"></a>
<span class="sourceLineNo">151</span><a name="line.151"></a>
<span class="sourceLineNo">152</span>    public BaosAndCompressor(CompressionContext compressionContext) {<a name="line.152"></a>
<span class="sourceLineNo">153</span>      this.compressionContext = compressionContext;<a name="line.153"></a>
<span class="sourceLineNo">154</span>    }<a name="line.154"></a>
<span class="sourceLineNo">155</span>    public ByteString toByteString() {<a name="line.155"></a>
<span class="sourceLineNo">156</span>      // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.156"></a>
<span class="sourceLineNo">157</span>      // them.<a name="line.157"></a>
<span class="sourceLineNo">158</span>      return ByteString.copyFrom(this.buf, 0, this.count);<a name="line.158"></a>
<span class="sourceLineNo">159</span>    }<a name="line.159"></a>
<span class="sourceLineNo">160</span><a name="line.160"></a>
<span class="sourceLineNo">161</span>    @Override<a name="line.161"></a>
<span class="sourceLineNo">162</span>    public ByteString compress(byte[] data, Enum dictIndex) throws IOException {<a name="line.162"></a>
<span class="sourceLineNo">163</span>      writeCompressed(data, dictIndex);<a name="line.163"></a>
<span class="sourceLineNo">164</span>      // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.164"></a>
<span class="sourceLineNo">165</span>      // them.<a name="line.165"></a>
<span class="sourceLineNo">166</span>      ByteString result = ByteString.copyFrom(this.buf, 0, this.count);<a name="line.166"></a>
<span class="sourceLineNo">167</span>      reset(); // Only resets the count - we reuse the byte array.<a name="line.167"></a>
<span class="sourceLineNo">168</span>      return result;<a name="line.168"></a>
<span class="sourceLineNo">169</span>    }<a name="line.169"></a>
<span class="sourceLineNo">170</span><a name="line.170"></a>
<span class="sourceLineNo">171</span>    private void writeCompressed(byte[] data, Enum dictIndex) throws IOException {<a name="line.171"></a>
<span class="sourceLineNo">172</span>      Dictionary dict = compressionContext.getDictionary(dictIndex);<a name="line.172"></a>
<span class="sourceLineNo">173</span>      assert dict != null;<a name="line.173"></a>
<span class="sourceLineNo">174</span>      short dictIdx = dict.findEntry(data, 0, data.length);<a name="line.174"></a>
<span class="sourceLineNo">175</span>      if (dictIdx == Dictionary.NOT_IN_DICTIONARY) {<a name="line.175"></a>
<span class="sourceLineNo">176</span>        write(Dictionary.NOT_IN_DICTIONARY);<a name="line.176"></a>
<span class="sourceLineNo">177</span>        StreamUtils.writeRawVInt32(this, data.length);<a name="line.177"></a>
<span class="sourceLineNo">178</span>        write(data, 0, data.length);<a name="line.178"></a>
<span class="sourceLineNo">179</span>      } else {<a name="line.179"></a>
<span class="sourceLineNo">180</span>        StreamUtils.writeShort(this, dictIdx);<a name="line.180"></a>
<span class="sourceLineNo">181</span>      }<a name="line.181"></a>
<span class="sourceLineNo">182</span>    }<a name="line.182"></a>
<span class="sourceLineNo">183</span>  }<a name="line.183"></a>
<span class="sourceLineNo">184</span><a name="line.184"></a>
<span class="sourceLineNo">185</span>  static class NoneCompressor implements ByteStringCompressor {<a name="line.185"></a>
<span class="sourceLineNo">186</span><a name="line.186"></a>
<span class="sourceLineNo">187</span>    @Override<a name="line.187"></a>
<span class="sourceLineNo">188</span>    public ByteString compress(byte[] data, Enum dictIndex) {<a name="line.188"></a>
<span class="sourceLineNo">189</span>      return UnsafeByteOperations.unsafeWrap(data);<a name="line.189"></a>
<span class="sourceLineNo">190</span>    }<a name="line.190"></a>
<span class="sourceLineNo">191</span>  }<a name="line.191"></a>
<span class="sourceLineNo">192</span><a name="line.192"></a>
<span class="sourceLineNo">193</span>  static class NoneUncompressor implements ByteStringUncompressor {<a name="line.193"></a>
<span class="sourceLineNo">194</span><a name="line.194"></a>
<span class="sourceLineNo">195</span>    @Override<a name="line.195"></a>
<span class="sourceLineNo">196</span>    public byte[] uncompress(ByteString data, Enum dictIndex) {<a name="line.196"></a>
<span class="sourceLineNo">197</span>      return data.toByteArray();<a name="line.197"></a>
<span class="sourceLineNo">198</span>    }<a name="line.198"></a>
<span class="sourceLineNo">199</span>  }<a name="line.199"></a>
<span class="sourceLineNo">200</span><a name="line.200"></a>
<span class="sourceLineNo">201</span>  private static byte[] uncompressByteString(ByteString bs, Dictionary dict) throws IOException {<a name="line.201"></a>
<span class="sourceLineNo">202</span>    InputStream in = bs.newInput();<a name="line.202"></a>
<span class="sourceLineNo">203</span>    byte status = (byte)in.read();<a name="line.203"></a>
<span class="sourceLineNo">204</span>    if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.204"></a>
<span class="sourceLineNo">205</span>      byte[] arr = new byte[StreamUtils.readRawVarint32(in)];<a name="line.205"></a>
<span class="sourceLineNo">206</span>      int bytesRead = in.read(arr);<a name="line.206"></a>
<span class="sourceLineNo">207</span>      if (bytesRead != arr.length) {<a name="line.207"></a>
<span class="sourceLineNo">208</span>        throw new IOException("Cannot read; wanted " + arr.length + ", but got " + bytesRead);<a name="line.208"></a>
<span class="sourceLineNo">209</span>      }<a name="line.209"></a>
<span class="sourceLineNo">210</span>      if (dict != null) dict.addEntry(arr, 0, arr.length);<a name="line.210"></a>
<span class="sourceLineNo">211</span>      return arr;<a name="line.211"></a>
<span class="sourceLineNo">212</span>    } else {<a name="line.212"></a>
<span class="sourceLineNo">213</span>      // Status here is the higher-order byte of index of the dictionary entry.<a name="line.213"></a>
<span class="sourceLineNo">214</span>      short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.214"></a>
<span class="sourceLineNo">215</span>      byte[] entry = dict.getEntry(dictIdx);<a name="line.215"></a>
<span class="sourceLineNo">216</span>      if (entry == null) {<a name="line.216"></a>
<span class="sourceLineNo">217</span>        throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.217"></a>
<span class="sourceLineNo">218</span>      }<a name="line.218"></a>
<span class="sourceLineNo">219</span>      return entry;<a name="line.219"></a>
<span class="sourceLineNo">220</span>    }<a name="line.220"></a>
<span class="sourceLineNo">221</span>  }<a name="line.221"></a>
<span class="sourceLineNo">222</span><a name="line.222"></a>
<span class="sourceLineNo">223</span>  static class CompressedKvEncoder extends BaseEncoder {<a name="line.223"></a>
<span class="sourceLineNo">224</span>    private final CompressionContext compression;<a name="line.224"></a>
<span class="sourceLineNo">225</span>    public CompressedKvEncoder(OutputStream out, CompressionContext compression) {<a name="line.225"></a>
<span class="sourceLineNo">226</span>      super(out);<a name="line.226"></a>
<span class="sourceLineNo">227</span>      this.compression = compression;<a name="line.227"></a>
<span class="sourceLineNo">228</span>    }<a name="line.228"></a>
<span class="sourceLineNo">229</span><a name="line.229"></a>
<span class="sourceLineNo">230</span>    @Override<a name="line.230"></a>
<span class="sourceLineNo">231</span>    public void write(Cell cell) throws IOException {<a name="line.231"></a>
<span class="sourceLineNo">232</span>      // We first write the KeyValue infrastructure as VInts.<a name="line.232"></a>
<span class="sourceLineNo">233</span>      StreamUtils.writeRawVInt32(out, KeyValueUtil.keyLength(cell));<a name="line.233"></a>
<span class="sourceLineNo">234</span>      StreamUtils.writeRawVInt32(out, cell.getValueLength());<a name="line.234"></a>
<span class="sourceLineNo">235</span>      // To support tags<a name="line.235"></a>
<span class="sourceLineNo">236</span>      int tagsLength = cell.getTagsLength();<a name="line.236"></a>
<span class="sourceLineNo">237</span>      StreamUtils.writeRawVInt32(out, tagsLength);<a name="line.237"></a>
<span class="sourceLineNo">238</span>      PrivateCellUtil.compressRow(out, cell,<a name="line.238"></a>
<span class="sourceLineNo">239</span>        compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.239"></a>
<span class="sourceLineNo">240</span>      PrivateCellUtil.compressFamily(out, cell,<a name="line.240"></a>
<span class="sourceLineNo">241</span>        compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.241"></a>
<span class="sourceLineNo">242</span>      PrivateCellUtil.compressQualifier(out, cell,<a name="line.242"></a>
<span class="sourceLineNo">243</span>        compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.243"></a>
<span class="sourceLineNo">244</span>      // Write timestamp, type and value as uncompressed.<a name="line.244"></a>
<span class="sourceLineNo">245</span>      StreamUtils.writeLong(out, cell.getTimestamp());<a name="line.245"></a>
<span class="sourceLineNo">246</span>      out.write(cell.getTypeByte());<a name="line.246"></a>
<span class="sourceLineNo">247</span>      PrivateCellUtil.writeValue(out, cell, cell.getValueLength());<a name="line.247"></a>
<span class="sourceLineNo">248</span>      if (tagsLength &gt; 0) {<a name="line.248"></a>
<span class="sourceLineNo">249</span>        if (compression.tagCompressionContext != null) {<a name="line.249"></a>
<span class="sourceLineNo">250</span>          // Write tags using Dictionary compression<a name="line.250"></a>
<span class="sourceLineNo">251</span>          PrivateCellUtil.compressTags(out, cell, compression.tagCompressionContext);<a name="line.251"></a>
<span class="sourceLineNo">252</span>        } else {<a name="line.252"></a>
<span class="sourceLineNo">253</span>          // Tag compression is disabled within the WAL compression. Just write the tags bytes as<a name="line.253"></a>
<span class="sourceLineNo">254</span>          // it is.<a name="line.254"></a>
<span class="sourceLineNo">255</span>          PrivateCellUtil.writeTags(out, cell, tagsLength);<a name="line.255"></a>
<span class="sourceLineNo">256</span>        }<a name="line.256"></a>
<span class="sourceLineNo">257</span>      }<a name="line.257"></a>
<span class="sourceLineNo">258</span>    }<a name="line.258"></a>
<span class="sourceLineNo">259</span>  }<a name="line.259"></a>
<span class="sourceLineNo">260</span><a name="line.260"></a>
<span class="sourceLineNo">261</span>  static class CompressedKvDecoder extends BaseDecoder {<a name="line.261"></a>
<span class="sourceLineNo">262</span>    private final CompressionContext compression;<a name="line.262"></a>
<span class="sourceLineNo">263</span>    public CompressedKvDecoder(InputStream in, CompressionContext compression) {<a name="line.263"></a>
<span class="sourceLineNo">264</span>      super(in);<a name="line.264"></a>
<span class="sourceLineNo">265</span>      this.compression = compression;<a name="line.265"></a>
<span class="sourceLineNo">266</span>    }<a name="line.266"></a>
<span class="sourceLineNo">267</span><a name="line.267"></a>
<span class="sourceLineNo">268</span>    @Override<a name="line.268"></a>
<span class="sourceLineNo">269</span>    protected Cell parseCell() throws IOException {<a name="line.269"></a>
<span class="sourceLineNo">270</span>      int keylength = StreamUtils.readRawVarint32(in);<a name="line.270"></a>
<span class="sourceLineNo">271</span>      int vlength = StreamUtils.readRawVarint32(in);<a name="line.271"></a>
<span class="sourceLineNo">272</span><a name="line.272"></a>
<span class="sourceLineNo">273</span>      int tagsLength = StreamUtils.readRawVarint32(in);<a name="line.273"></a>
<span class="sourceLineNo">274</span>      int length = 0;<a name="line.274"></a>
<span class="sourceLineNo">275</span>      if(tagsLength == 0) {<a name="line.275"></a>
<span class="sourceLineNo">276</span>        length = KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE + keylength + vlength;<a name="line.276"></a>
<span class="sourceLineNo">277</span>      } else {<a name="line.277"></a>
<span class="sourceLineNo">278</span>        length = KeyValue.KEYVALUE_WITH_TAGS_INFRASTRUCTURE_SIZE + keylength + vlength + tagsLength;<a name="line.278"></a>
<span class="sourceLineNo">279</span>      }<a name="line.279"></a>
<span class="sourceLineNo">280</span><a name="line.280"></a>
<span class="sourceLineNo">281</span>      byte[] backingArray = new byte[length];<a name="line.281"></a>
<span class="sourceLineNo">282</span>      int pos = 0;<a name="line.282"></a>
<span class="sourceLineNo">283</span>      pos = Bytes.putInt(backingArray, pos, keylength);<a name="line.283"></a>
<span class="sourceLineNo">284</span>      pos = Bytes.putInt(backingArray, pos, vlength);<a name="line.284"></a>
<span class="sourceLineNo">285</span><a name="line.285"></a>
<span class="sourceLineNo">286</span>      // the row<a name="line.286"></a>
<span class="sourceLineNo">287</span>      int elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_SHORT,<a name="line.287"></a>
<span class="sourceLineNo">288</span>        compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.288"></a>
<span class="sourceLineNo">289</span>      checkLength(elemLen, Short.MAX_VALUE);<a name="line.289"></a>
<span class="sourceLineNo">290</span>      pos = Bytes.putShort(backingArray, pos, (short)elemLen);<a name="line.290"></a>
<span class="sourceLineNo">291</span>      pos += elemLen;<a name="line.291"></a>
<span class="sourceLineNo">292</span><a name="line.292"></a>
<span class="sourceLineNo">293</span>      // family<a name="line.293"></a>
<span class="sourceLineNo">294</span>      elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_BYTE,<a name="line.294"></a>
<span class="sourceLineNo">295</span>        compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.295"></a>
<span class="sourceLineNo">296</span>      checkLength(elemLen, Byte.MAX_VALUE);<a name="line.296"></a>
<span class="sourceLineNo">297</span>      pos = Bytes.putByte(backingArray, pos, (byte)elemLen);<a name="line.297"></a>
<span class="sourceLineNo">298</span>      pos += elemLen;<a name="line.298"></a>
<span class="sourceLineNo">299</span><a name="line.299"></a>
<span class="sourceLineNo">300</span>      // qualifier<a name="line.300"></a>
<span class="sourceLineNo">301</span>      elemLen = readIntoArray(backingArray, pos,<a name="line.301"></a>
<span class="sourceLineNo">302</span>        compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.302"></a>
<span class="sourceLineNo">303</span>      pos += elemLen;<a name="line.303"></a>
<span class="sourceLineNo">304</span><a name="line.304"></a>
<span class="sourceLineNo">305</span>      // timestamp, type and value<a name="line.305"></a>
<span class="sourceLineNo">306</span>      int tsTypeValLen = length - pos;<a name="line.306"></a>
<span class="sourceLineNo">307</span>      if (tagsLength &gt; 0) {<a name="line.307"></a>
<span class="sourceLineNo">308</span>        tsTypeValLen = tsTypeValLen - tagsLength - KeyValue.TAGS_LENGTH_SIZE;<a name="line.308"></a>
<span class="sourceLineNo">309</span>      }<a name="line.309"></a>
<span class="sourceLineNo">310</span>      IOUtils.readFully(in, backingArray, pos, tsTypeValLen);<a name="line.310"></a>
<span class="sourceLineNo">311</span>      pos += tsTypeValLen;<a name="line.311"></a>
<span class="sourceLineNo">312</span><a name="line.312"></a>
<span class="sourceLineNo">313</span>      // tags<a name="line.313"></a>
<span class="sourceLineNo">314</span>      if (tagsLength &gt; 0) {<a name="line.314"></a>
<span class="sourceLineNo">315</span>        pos = Bytes.putAsShort(backingArray, pos, tagsLength);<a name="line.315"></a>
<span class="sourceLineNo">316</span>        if (compression.tagCompressionContext != null) {<a name="line.316"></a>
<span class="sourceLineNo">317</span>          compression.tagCompressionContext.uncompressTags(in, backingArray, pos, tagsLength);<a name="line.317"></a>
<span class="sourceLineNo">318</span>        } else {<a name="line.318"></a>
<span class="sourceLineNo">319</span>          IOUtils.readFully(in, backingArray, pos, tagsLength);<a name="line.319"></a>
<span class="sourceLineNo">320</span>        }<a name="line.320"></a>
<span class="sourceLineNo">321</span>      }<a name="line.321"></a>
<span class="sourceLineNo">322</span>      return new KeyValue(backingArray, 0, length);<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>    private int readIntoArray(byte[] to, int offset, Dictionary dict) throws IOException {<a name="line.325"></a>
<span class="sourceLineNo">326</span>      byte status = (byte)in.read();<a name="line.326"></a>
<span class="sourceLineNo">327</span>      if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.327"></a>
<span class="sourceLineNo">328</span>        // status byte indicating that data to be read is not in dictionary.<a name="line.328"></a>
<span class="sourceLineNo">329</span>        // if this isn't in the dictionary, we need to add to the dictionary.<a name="line.329"></a>
<span class="sourceLineNo">330</span>        int length = StreamUtils.readRawVarint32(in);<a name="line.330"></a>
<span class="sourceLineNo">331</span>        IOUtils.readFully(in, to, offset, length);<a name="line.331"></a>
<span class="sourceLineNo">332</span>        dict.addEntry(to, offset, length);<a name="line.332"></a>
<span class="sourceLineNo">333</span>        return length;<a name="line.333"></a>
<span class="sourceLineNo">334</span>      } else {<a name="line.334"></a>
<span class="sourceLineNo">335</span>        // the status byte also acts as the higher order byte of the dictionary entry.<a name="line.335"></a>
<span class="sourceLineNo">336</span>        short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.336"></a>
<span class="sourceLineNo">337</span>        byte[] entry = dict.getEntry(dictIdx);<a name="line.337"></a>
<span class="sourceLineNo">338</span>        if (entry == null) {<a name="line.338"></a>
<span class="sourceLineNo">339</span>          throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.339"></a>
<span class="sourceLineNo">340</span>        }<a name="line.340"></a>
<span class="sourceLineNo">341</span>        // now we write the uncompressed value.<a name="line.341"></a>
<span class="sourceLineNo">342</span>        Bytes.putBytes(to, offset, entry, 0, entry.length);<a name="line.342"></a>
<span class="sourceLineNo">343</span>        return entry.length;<a name="line.343"></a>
<span class="sourceLineNo">344</span>      }<a name="line.344"></a>
<span class="sourceLineNo">345</span>    }<a name="line.345"></a>
<span class="sourceLineNo">346</span><a name="line.346"></a>
<span class="sourceLineNo">347</span>    private static void checkLength(int len, int max) throws IOException {<a name="line.347"></a>
<span class="sourceLineNo">348</span>      if (len &lt; 0 || len &gt; max) {<a name="line.348"></a>
<span class="sourceLineNo">349</span>        throw new IOException("Invalid length for compresesed portion of keyvalue: " + len);<a name="line.349"></a>
<span class="sourceLineNo">350</span>      }<a name="line.350"></a>
<span class="sourceLineNo">351</span>    }<a name="line.351"></a>
<span class="sourceLineNo">352</span>  }<a name="line.352"></a>
<span class="sourceLineNo">353</span><a name="line.353"></a>
<span class="sourceLineNo">354</span>  public static class EnsureKvEncoder extends BaseEncoder {<a name="line.354"></a>
<span class="sourceLineNo">355</span>    public EnsureKvEncoder(OutputStream out) {<a name="line.355"></a>
<span class="sourceLineNo">356</span>      super(out);<a name="line.356"></a>
<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
<span class="sourceLineNo">358</span>    @Override<a name="line.358"></a>
<span class="sourceLineNo">359</span>    public void write(Cell cell) throws IOException {<a name="line.359"></a>
<span class="sourceLineNo">360</span>      checkFlushed();<a name="line.360"></a>
<span class="sourceLineNo">361</span>      // Make sure to write tags into WAL<a name="line.361"></a>
<span class="sourceLineNo">362</span>      ByteBufferUtils.putInt(this.out, KeyValueUtil.getSerializedSize(cell, true));<a name="line.362"></a>
<span class="sourceLineNo">363</span>      KeyValueUtil.oswrite(cell, this.out, true);<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><a name="line.366"></a>
<span class="sourceLineNo">367</span>  @Override<a name="line.367"></a>
<span class="sourceLineNo">368</span>  public Decoder getDecoder(InputStream is) {<a name="line.368"></a>
<span class="sourceLineNo">369</span>    return (compression == null)<a name="line.369"></a>
<span class="sourceLineNo">370</span>        ? new KeyValueCodecWithTags.KeyValueDecoder(is) : new CompressedKvDecoder(is, compression);<a name="line.370"></a>
<span class="sourceLineNo">371</span>  }<a name="line.371"></a>
<span class="sourceLineNo">372</span><a name="line.372"></a>
<span class="sourceLineNo">373</span>  @Override<a name="line.373"></a>
<span class="sourceLineNo">374</span>  public Decoder getDecoder(ByteBuff buf) {<a name="line.374"></a>
<span class="sourceLineNo">375</span>    return getDecoder(new ByteBuffInputStream(buf));<a name="line.375"></a>
<span class="sourceLineNo">376</span>  }<a name="line.376"></a>
<span class="sourceLineNo">377</span><a name="line.377"></a>
<span class="sourceLineNo">378</span>  @Override<a name="line.378"></a>
<span class="sourceLineNo">379</span>  public Encoder getEncoder(OutputStream os) {<a name="line.379"></a>
<span class="sourceLineNo">380</span>    os = (os instanceof ByteBufferWriter) ? os<a name="line.380"></a>
<span class="sourceLineNo">381</span>        : new ByteBufferWriterOutputStream(os);<a name="line.381"></a>
<span class="sourceLineNo">382</span>    if (compression == null) {<a name="line.382"></a>
<span class="sourceLineNo">383</span>      return new EnsureKvEncoder(os);<a name="line.383"></a>
<span class="sourceLineNo">384</span>    }<a name="line.384"></a>
<span class="sourceLineNo">385</span>    return new CompressedKvEncoder(os, compression);<a name="line.385"></a>
<span class="sourceLineNo">386</span>  }<a name="line.386"></a>
<span class="sourceLineNo">387</span><a name="line.387"></a>
<span class="sourceLineNo">388</span>  public ByteStringCompressor getByteStringCompressor() {<a name="line.388"></a>
<span class="sourceLineNo">389</span>    return new BaosAndCompressor(compression);<a name="line.389"></a>
<span class="sourceLineNo">390</span>  }<a name="line.390"></a>
<span class="sourceLineNo">391</span><a name="line.391"></a>
<span class="sourceLineNo">392</span>  public ByteStringUncompressor getByteStringUncompressor() {<a name="line.392"></a>
<span class="sourceLineNo">393</span>    return new StatelessUncompressor(compression);<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>  public static ByteStringCompressor getNoneCompressor() {<a name="line.396"></a>
<span class="sourceLineNo">397</span>    return new NoneCompressor();<a name="line.397"></a>
<span class="sourceLineNo">398</span>  }<a name="line.398"></a>
<span class="sourceLineNo">399</span><a name="line.399"></a>
<span class="sourceLineNo">400</span>  public static ByteStringUncompressor getNoneUncompressor() {<a name="line.400"></a>
<span class="sourceLineNo">401</span>    return new NoneUncompressor();<a name="line.401"></a>
<span class="sourceLineNo">402</span>  }<a name="line.402"></a>
<span class="sourceLineNo">403</span>}<a name="line.403"></a>




























































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