http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2aec596e/apidocs/src-html/org/apache/hadoop/hbase/filter/DependentColumnFilter.html
----------------------------------------------------------------------
diff --git 
a/apidocs/src-html/org/apache/hadoop/hbase/filter/DependentColumnFilter.html 
b/apidocs/src-html/org/apache/hadoop/hbase/filter/DependentColumnFilter.html
index 8b561ba..da02cae 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/filter/DependentColumnFilter.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/filter/DependentColumnFilter.html
@@ -29,273 +29,265 @@
 <span class="sourceLineNo">021</span>import java.io.IOException;<a 
name="line.21"></a>
 <span class="sourceLineNo">022</span>import java.util.ArrayList;<a 
name="line.22"></a>
 <span class="sourceLineNo">023</span>import java.util.HashSet;<a 
name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.util.Iterator;<a 
name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.List;<a 
name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.Set;<a 
name="line.26"></a>
-<span class="sourceLineNo">027</span><a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.Cell;<a 
name="line.28"></a>
-<span class="sourceLineNo">029</span>import 
org.apache.hadoop.hbase.CellUtil;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import 
org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import 
org.apache.hadoop.hbase.exceptions.DeserializationException;<a 
name="line.31"></a>
-<span class="sourceLineNo">032</span>import 
org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import 
org.apache.hadoop.hbase.shaded.protobuf.generated.FilterProtos;<a 
name="line.33"></a>
-<span class="sourceLineNo">034</span>import 
org.apache.hadoop.hbase.util.Bytes;<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.shaded.com.google.common.base.Preconditions;<a 
name="line.36"></a>
-<span class="sourceLineNo">037</span><a name="line.37"></a>
-<span class="sourceLineNo">038</span>import 
org.apache.hadoop.hbase.shaded.com.google.protobuf.InvalidProtocolBufferException;<a
 name="line.38"></a>
-<span class="sourceLineNo">039</span>import 
org.apache.hadoop.hbase.shaded.com.google.protobuf.UnsafeByteOperations;<a 
name="line.39"></a>
-<span class="sourceLineNo">040</span><a name="line.40"></a>
-<span class="sourceLineNo">041</span>/**<a name="line.41"></a>
-<span class="sourceLineNo">042</span> * A filter for adding inter-column 
timestamp matching<a name="line.42"></a>
-<span class="sourceLineNo">043</span> * Only cells with a correspondingly 
timestamped entry in<a name="line.43"></a>
-<span class="sourceLineNo">044</span> * the target column will be retained<a 
name="line.44"></a>
-<span class="sourceLineNo">045</span> * Not compatible with Scan.setBatch as 
operations need <a name="line.45"></a>
-<span class="sourceLineNo">046</span> * full rows for correct filtering <a 
name="line.46"></a>
-<span class="sourceLineNo">047</span> */<a name="line.47"></a>
-<span class="sourceLineNo">048</span>@InterfaceAudience.Public<a 
name="line.48"></a>
-<span class="sourceLineNo">049</span>public class DependentColumnFilter 
extends CompareFilter {<a name="line.49"></a>
-<span class="sourceLineNo">050</span><a name="line.50"></a>
-<span class="sourceLineNo">051</span>  protected byte[] columnFamily;<a 
name="line.51"></a>
-<span class="sourceLineNo">052</span>  protected byte[] columnQualifier;<a 
name="line.52"></a>
-<span class="sourceLineNo">053</span>  protected boolean 
dropDependentColumn;<a name="line.53"></a>
-<span class="sourceLineNo">054</span><a name="line.54"></a>
-<span class="sourceLineNo">055</span>  protected Set&lt;Long&gt; stampSet = 
new HashSet&lt;&gt;();<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  <a name="line.56"></a>
-<span class="sourceLineNo">057</span>  /**<a name="line.57"></a>
-<span class="sourceLineNo">058</span>   * Build a dependent column filter with 
value checking<a name="line.58"></a>
-<span class="sourceLineNo">059</span>   * dependent column varies will be 
compared using the supplied<a name="line.59"></a>
-<span class="sourceLineNo">060</span>   * compareOp and comparator, for usage 
of which<a name="line.60"></a>
-<span class="sourceLineNo">061</span>   * refer to {@link CompareFilter}<a 
name="line.61"></a>
-<span class="sourceLineNo">062</span>   * <a name="line.62"></a>
-<span class="sourceLineNo">063</span>   * @param family dependent column 
family<a name="line.63"></a>
-<span class="sourceLineNo">064</span>   * @param qualifier dependent column 
qualifier<a name="line.64"></a>
-<span class="sourceLineNo">065</span>   * @param dropDependentColumn whether 
the column should be discarded after<a name="line.65"></a>
-<span class="sourceLineNo">066</span>   * @param valueCompareOp comparison op 
<a name="line.66"></a>
-<span class="sourceLineNo">067</span>   * @param valueComparator comparator<a 
name="line.67"></a>
-<span class="sourceLineNo">068</span>   */<a name="line.68"></a>
-<span class="sourceLineNo">069</span>  public DependentColumnFilter(final byte 
[] family, final byte[] qualifier,<a name="line.69"></a>
-<span class="sourceLineNo">070</span>      final boolean dropDependentColumn, 
final CompareOp valueCompareOp,<a name="line.70"></a>
-<span class="sourceLineNo">071</span>        final ByteArrayComparable 
valueComparator) {<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    // set up the comparator   <a 
name="line.72"></a>
-<span class="sourceLineNo">073</span>    super(valueCompareOp, 
valueComparator);<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    this.columnFamily = family;<a 
name="line.74"></a>
-<span class="sourceLineNo">075</span>    this.columnQualifier = qualifier;<a 
name="line.75"></a>
-<span class="sourceLineNo">076</span>    this.dropDependentColumn = 
dropDependentColumn;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  }<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  <a name="line.78"></a>
-<span class="sourceLineNo">079</span>  /**<a name="line.79"></a>
-<span class="sourceLineNo">080</span>   * Constructor for DependentColumn 
filter.<a name="line.80"></a>
-<span class="sourceLineNo">081</span>   * Cells where a Cell from target 
column<a name="line.81"></a>
-<span class="sourceLineNo">082</span>   * with the same timestamp do not exist 
will be dropped.<a name="line.82"></a>
-<span class="sourceLineNo">083</span>   *<a name="line.83"></a>
-<span class="sourceLineNo">084</span>   * @param family name of target column 
family<a name="line.84"></a>
-<span class="sourceLineNo">085</span>   * @param qualifier name of column 
qualifier<a name="line.85"></a>
-<span class="sourceLineNo">086</span>   */<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  public DependentColumnFilter(final byte 
[] family, final byte [] qualifier) {<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    this(family, qualifier, false);<a 
name="line.88"></a>
-<span class="sourceLineNo">089</span>  }<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  <a name="line.90"></a>
-<span class="sourceLineNo">091</span>  /**<a name="line.91"></a>
-<span class="sourceLineNo">092</span>   * Constructor for DependentColumn 
filter.<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   * Cells where a Cell from target 
column<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * with the same timestamp do not exist 
will be dropped.<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   *<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   * @param family name of dependent 
column family<a name="line.96"></a>
-<span class="sourceLineNo">097</span>   * @param qualifier name of dependent 
qualifier<a name="line.97"></a>
-<span class="sourceLineNo">098</span>   * @param dropDependentColumn whether 
the dependent columns Cells should be discarded<a name="line.98"></a>
-<span class="sourceLineNo">099</span>   */<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  public DependentColumnFilter(final byte 
[] family, final byte [] qualifier,<a name="line.100"></a>
-<span class="sourceLineNo">101</span>      final boolean dropDependentColumn) 
{<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    this(family, qualifier, 
dropDependentColumn, CompareOp.NO_OP, null);<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  }<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span>  /**<a name="line.105"></a>
-<span class="sourceLineNo">106</span>   * @return the column family<a 
name="line.106"></a>
-<span class="sourceLineNo">107</span>   */<a name="line.107"></a>
-<span class="sourceLineNo">108</span>  public byte[] getFamily() {<a 
name="line.108"></a>
-<span class="sourceLineNo">109</span>    return this.columnFamily;<a 
name="line.109"></a>
-<span class="sourceLineNo">110</span>  }<a name="line.110"></a>
-<span class="sourceLineNo">111</span><a name="line.111"></a>
-<span class="sourceLineNo">112</span>  /**<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   * @return the column qualifier<a 
name="line.113"></a>
-<span class="sourceLineNo">114</span>   */<a name="line.114"></a>
-<span class="sourceLineNo">115</span>  public byte[] getQualifier() {<a 
name="line.115"></a>
-<span class="sourceLineNo">116</span>    return this.columnQualifier;<a 
name="line.116"></a>
-<span class="sourceLineNo">117</span>  }<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>  /**<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * @return true if we should drop the 
dependent column, false otherwise<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   */<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  public boolean dropDependentColumn() 
{<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    return this.dropDependentColumn;<a 
name="line.123"></a>
-<span class="sourceLineNo">124</span>  }<a name="line.124"></a>
-<span class="sourceLineNo">125</span><a name="line.125"></a>
-<span class="sourceLineNo">126</span>  public boolean getDropDependentColumn() 
{<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    return this.dropDependentColumn;<a 
name="line.127"></a>
-<span class="sourceLineNo">128</span>  }<a name="line.128"></a>
-<span class="sourceLineNo">129</span><a name="line.129"></a>
-<span class="sourceLineNo">130</span>  @Override<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  public boolean filterAllRemaining() {<a 
name="line.131"></a>
-<span class="sourceLineNo">132</span>    return false;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>  }<a name="line.133"></a>
-<span class="sourceLineNo">134</span><a name="line.134"></a>
-<span class="sourceLineNo">135</span>  @Override<a name="line.135"></a>
-<span class="sourceLineNo">136</span>  public ReturnCode filterKeyValue(Cell 
c) {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    // Check if the column and qualifier 
match<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    if (!CellUtil.matchingColumn(c, 
this.columnFamily, this.columnQualifier)) {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>        // include non-matches for the 
time being, they'll be discarded afterwards<a name="line.139"></a>
-<span class="sourceLineNo">140</span>        return ReturnCode.INCLUDE;<a 
name="line.140"></a>
-<span class="sourceLineNo">141</span>    }<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    // If it doesn't pass the op, skip 
it<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    if (comparator != null<a 
name="line.143"></a>
-<span class="sourceLineNo">144</span>        &amp;&amp; 
compareValue(compareOp, comparator, c))<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      return ReturnCode.SKIP;<a 
name="line.145"></a>
-<span class="sourceLineNo">146</span>  <a name="line.146"></a>
-<span class="sourceLineNo">147</span>    stampSet.add(c.getTimestamp());<a 
name="line.147"></a>
-<span class="sourceLineNo">148</span>    if(dropDependentColumn) {<a 
name="line.148"></a>
-<span class="sourceLineNo">149</span>      return ReturnCode.SKIP;<a 
name="line.149"></a>
-<span class="sourceLineNo">150</span>    }<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    return ReturnCode.INCLUDE;<a 
name="line.151"></a>
-<span class="sourceLineNo">152</span>  }<a name="line.152"></a>
-<span class="sourceLineNo">153</span><a name="line.153"></a>
-<span class="sourceLineNo">154</span>  @Override<a name="line.154"></a>
-<span class="sourceLineNo">155</span>  public void 
filterRowCells(List&lt;Cell&gt; kvs) {<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    Iterator&lt;? extends Cell&gt; it = 
kvs.iterator();<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    Cell kv;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    while(it.hasNext()) {<a 
name="line.158"></a>
-<span class="sourceLineNo">159</span>      kv = it.next();<a 
name="line.159"></a>
-<span class="sourceLineNo">160</span>      
if(!stampSet.contains(kv.getTimestamp())) {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        it.remove();<a 
name="line.161"></a>
-<span class="sourceLineNo">162</span>      }<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    }<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  }<a name="line.164"></a>
-<span class="sourceLineNo">165</span><a name="line.165"></a>
-<span class="sourceLineNo">166</span>  @Override<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  public boolean hasFilterRow() {<a 
name="line.167"></a>
-<span class="sourceLineNo">168</span>    return true;<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>  @Override<a name="line.171"></a>
-<span class="sourceLineNo">172</span>  public boolean filterRow() {<a 
name="line.172"></a>
-<span class="sourceLineNo">173</span>    return false;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>  }<a name="line.174"></a>
-<span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>  @Override<a name="line.176"></a>
-<span class="sourceLineNo">177</span>  public boolean filterRowKey(byte[] 
buffer, int offset, int length) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    return false;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>  }<a name="line.179"></a>
-<span class="sourceLineNo">180</span>  @Override<a name="line.180"></a>
-<span class="sourceLineNo">181</span>  public void reset() {<a 
name="line.181"></a>
-<span class="sourceLineNo">182</span>    stampSet.clear();    <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>  public static Filter 
createFilterFromArguments(ArrayList&lt;byte []&gt; filterArguments) {<a 
name="line.185"></a>
-<span class="sourceLineNo">186</span>    
Preconditions.checkArgument(filterArguments.size() == 2 ||<a 
name="line.186"></a>
-<span class="sourceLineNo">187</span>                                
filterArguments.size() == 3 ||<a name="line.187"></a>
-<span class="sourceLineNo">188</span>                                
filterArguments.size() == 5,<a name="line.188"></a>
-<span class="sourceLineNo">189</span>                                "Expected 
2, 3 or 5 but got: %s", filterArguments.size());<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    if (filterArguments.size() == 2) {<a 
name="line.190"></a>
-<span class="sourceLineNo">191</span>      byte [] family = 
ParseFilter.removeQuotesFromByteArray(filterArguments.get(0));<a 
name="line.191"></a>
-<span class="sourceLineNo">192</span>      byte [] qualifier = 
ParseFilter.removeQuotesFromByteArray(filterArguments.get(1));<a 
name="line.192"></a>
-<span class="sourceLineNo">193</span>      return new 
DependentColumnFilter(family, qualifier);<a name="line.193"></a>
-<span class="sourceLineNo">194</span><a name="line.194"></a>
-<span class="sourceLineNo">195</span>    } else if (filterArguments.size() == 
3) {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      byte [] family = 
ParseFilter.removeQuotesFromByteArray(filterArguments.get(0));<a 
name="line.196"></a>
-<span class="sourceLineNo">197</span>      byte [] qualifier = 
ParseFilter.removeQuotesFromByteArray(filterArguments.get(1));<a 
name="line.197"></a>
-<span class="sourceLineNo">198</span>      boolean dropDependentColumn = 
ParseFilter.convertByteArrayToBoolean(filterArguments.get(2));<a 
name="line.198"></a>
-<span class="sourceLineNo">199</span>      return new 
DependentColumnFilter(family, qualifier, dropDependentColumn);<a 
name="line.199"></a>
-<span class="sourceLineNo">200</span><a name="line.200"></a>
-<span class="sourceLineNo">201</span>    } else if (filterArguments.size() == 
5) {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      byte [] family = 
ParseFilter.removeQuotesFromByteArray(filterArguments.get(0));<a 
name="line.202"></a>
-<span class="sourceLineNo">203</span>      byte [] qualifier = 
ParseFilter.removeQuotesFromByteArray(filterArguments.get(1));<a 
name="line.203"></a>
-<span class="sourceLineNo">204</span>      boolean dropDependentColumn = 
ParseFilter.convertByteArrayToBoolean(filterArguments.get(2));<a 
name="line.204"></a>
-<span class="sourceLineNo">205</span>      CompareOp compareOp = 
ParseFilter.createCompareOp(filterArguments.get(3));<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      ByteArrayComparable comparator = 
ParseFilter.createComparator(<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        
ParseFilter.removeQuotesFromByteArray(filterArguments.get(4)));<a 
name="line.207"></a>
-<span class="sourceLineNo">208</span>      return new 
DependentColumnFilter(family, qualifier, dropDependentColumn,<a 
name="line.208"></a>
-<span class="sourceLineNo">209</span>                                       
compareOp, comparator);<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    } else {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      throw new 
IllegalArgumentException("Expected 2, 3 or 5 but got: " + 
filterArguments.size());<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    }<a name="line.212"></a>
-<span class="sourceLineNo">213</span>  }<a name="line.213"></a>
-<span class="sourceLineNo">214</span><a name="line.214"></a>
-<span class="sourceLineNo">215</span>  /**<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   * @return The filter serialized using 
pb<a name="line.216"></a>
-<span class="sourceLineNo">217</span>   */<a name="line.217"></a>
-<span class="sourceLineNo">218</span>  public byte [] toByteArray() {<a 
name="line.218"></a>
-<span class="sourceLineNo">219</span>    
FilterProtos.DependentColumnFilter.Builder builder =<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      
FilterProtos.DependentColumnFilter.newBuilder();<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    
builder.setCompareFilter(super.convert());<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    if (this.columnFamily != null) {<a 
name="line.222"></a>
-<span class="sourceLineNo">223</span>      
builder.setColumnFamily(UnsafeByteOperations.unsafeWrap(this.columnFamily));<a 
name="line.223"></a>
-<span class="sourceLineNo">224</span>    }<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    if (this.columnQualifier != null) {<a 
name="line.225"></a>
-<span class="sourceLineNo">226</span>      
builder.setColumnQualifier(UnsafeByteOperations.unsafeWrap(this.columnQualifier));<a
 name="line.226"></a>
-<span class="sourceLineNo">227</span>    }<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    
builder.setDropDependentColumn(this.dropDependentColumn);<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    return 
builder.build().toByteArray();<a name="line.229"></a>
-<span class="sourceLineNo">230</span>  }<a name="line.230"></a>
-<span class="sourceLineNo">231</span><a name="line.231"></a>
-<span class="sourceLineNo">232</span>  /**<a name="line.232"></a>
-<span class="sourceLineNo">233</span>   * @param pbBytes A pb serialized 
{@link DependentColumnFilter} instance<a name="line.233"></a>
-<span class="sourceLineNo">234</span>   * @return An instance of {@link 
DependentColumnFilter} made from &lt;code&gt;bytes&lt;/code&gt;<a 
name="line.234"></a>
-<span class="sourceLineNo">235</span>   * @throws DeserializationException<a 
name="line.235"></a>
-<span class="sourceLineNo">236</span>   * @see #toByteArray<a 
name="line.236"></a>
-<span class="sourceLineNo">237</span>   */<a name="line.237"></a>
-<span class="sourceLineNo">238</span>  public static DependentColumnFilter 
parseFrom(final byte [] pbBytes)<a name="line.238"></a>
-<span class="sourceLineNo">239</span>  throws DeserializationException {<a 
name="line.239"></a>
-<span class="sourceLineNo">240</span>    FilterProtos.DependentColumnFilter 
proto;<a name="line.240"></a>
+<span class="sourceLineNo">024</span>import java.util.List;<a 
name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.Set;<a 
name="line.25"></a>
+<span class="sourceLineNo">026</span><a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.Cell;<a 
name="line.27"></a>
+<span class="sourceLineNo">028</span>import 
org.apache.hadoop.hbase.CellUtil;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import 
org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import 
org.apache.hadoop.hbase.exceptions.DeserializationException;<a 
name="line.30"></a>
+<span class="sourceLineNo">031</span>import 
org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import 
org.apache.hadoop.hbase.shaded.protobuf.generated.FilterProtos;<a 
name="line.32"></a>
+<span class="sourceLineNo">033</span>import 
org.apache.hadoop.hbase.util.Bytes;<a name="line.33"></a>
+<span class="sourceLineNo">034</span><a name="line.34"></a>
+<span class="sourceLineNo">035</span>import 
org.apache.hadoop.hbase.shaded.com.google.common.base.Preconditions;<a 
name="line.35"></a>
+<span class="sourceLineNo">036</span><a name="line.36"></a>
+<span class="sourceLineNo">037</span>import 
org.apache.hadoop.hbase.shaded.com.google.protobuf.InvalidProtocolBufferException;<a
 name="line.37"></a>
+<span class="sourceLineNo">038</span>import 
org.apache.hadoop.hbase.shaded.com.google.protobuf.UnsafeByteOperations;<a 
name="line.38"></a>
+<span class="sourceLineNo">039</span><a name="line.39"></a>
+<span class="sourceLineNo">040</span>/**<a name="line.40"></a>
+<span class="sourceLineNo">041</span> * A filter for adding inter-column 
timestamp matching<a name="line.41"></a>
+<span class="sourceLineNo">042</span> * Only cells with a correspondingly 
timestamped entry in<a name="line.42"></a>
+<span class="sourceLineNo">043</span> * the target column will be retained<a 
name="line.43"></a>
+<span class="sourceLineNo">044</span> * Not compatible with Scan.setBatch as 
operations need <a name="line.44"></a>
+<span class="sourceLineNo">045</span> * full rows for correct filtering <a 
name="line.45"></a>
+<span class="sourceLineNo">046</span> */<a name="line.46"></a>
+<span class="sourceLineNo">047</span>@InterfaceAudience.Public<a 
name="line.47"></a>
+<span class="sourceLineNo">048</span>public class DependentColumnFilter 
extends CompareFilter {<a name="line.48"></a>
+<span class="sourceLineNo">049</span><a name="line.49"></a>
+<span class="sourceLineNo">050</span>  protected byte[] columnFamily;<a 
name="line.50"></a>
+<span class="sourceLineNo">051</span>  protected byte[] columnQualifier;<a 
name="line.51"></a>
+<span class="sourceLineNo">052</span>  protected boolean 
dropDependentColumn;<a name="line.52"></a>
+<span class="sourceLineNo">053</span><a name="line.53"></a>
+<span class="sourceLineNo">054</span>  protected Set&lt;Long&gt; stampSet = 
new HashSet&lt;&gt;();<a name="line.54"></a>
+<span class="sourceLineNo">055</span>  <a name="line.55"></a>
+<span class="sourceLineNo">056</span>  /**<a name="line.56"></a>
+<span class="sourceLineNo">057</span>   * Build a dependent column filter with 
value checking<a name="line.57"></a>
+<span class="sourceLineNo">058</span>   * dependent column varies will be 
compared using the supplied<a name="line.58"></a>
+<span class="sourceLineNo">059</span>   * compareOp and comparator, for usage 
of which<a name="line.59"></a>
+<span class="sourceLineNo">060</span>   * refer to {@link CompareFilter}<a 
name="line.60"></a>
+<span class="sourceLineNo">061</span>   * <a name="line.61"></a>
+<span class="sourceLineNo">062</span>   * @param family dependent column 
family<a name="line.62"></a>
+<span class="sourceLineNo">063</span>   * @param qualifier dependent column 
qualifier<a name="line.63"></a>
+<span class="sourceLineNo">064</span>   * @param dropDependentColumn whether 
the column should be discarded after<a name="line.64"></a>
+<span class="sourceLineNo">065</span>   * @param valueCompareOp comparison op 
<a name="line.65"></a>
+<span class="sourceLineNo">066</span>   * @param valueComparator comparator<a 
name="line.66"></a>
+<span class="sourceLineNo">067</span>   */<a name="line.67"></a>
+<span class="sourceLineNo">068</span>  public DependentColumnFilter(final byte 
[] family, final byte[] qualifier,<a name="line.68"></a>
+<span class="sourceLineNo">069</span>      final boolean dropDependentColumn, 
final CompareOp valueCompareOp,<a name="line.69"></a>
+<span class="sourceLineNo">070</span>        final ByteArrayComparable 
valueComparator) {<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    // set up the comparator   <a 
name="line.71"></a>
+<span class="sourceLineNo">072</span>    super(valueCompareOp, 
valueComparator);<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    this.columnFamily = family;<a 
name="line.73"></a>
+<span class="sourceLineNo">074</span>    this.columnQualifier = qualifier;<a 
name="line.74"></a>
+<span class="sourceLineNo">075</span>    this.dropDependentColumn = 
dropDependentColumn;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  }<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  <a name="line.77"></a>
+<span class="sourceLineNo">078</span>  /**<a name="line.78"></a>
+<span class="sourceLineNo">079</span>   * Constructor for DependentColumn 
filter.<a name="line.79"></a>
+<span class="sourceLineNo">080</span>   * Cells where a Cell from target 
column<a name="line.80"></a>
+<span class="sourceLineNo">081</span>   * with the same timestamp do not exist 
will be dropped.<a name="line.81"></a>
+<span class="sourceLineNo">082</span>   *<a name="line.82"></a>
+<span class="sourceLineNo">083</span>   * @param family name of target column 
family<a name="line.83"></a>
+<span class="sourceLineNo">084</span>   * @param qualifier name of column 
qualifier<a name="line.84"></a>
+<span class="sourceLineNo">085</span>   */<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  public DependentColumnFilter(final byte 
[] family, final byte [] qualifier) {<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    this(family, qualifier, false);<a 
name="line.87"></a>
+<span class="sourceLineNo">088</span>  }<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  <a name="line.89"></a>
+<span class="sourceLineNo">090</span>  /**<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   * Constructor for DependentColumn 
filter.<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   * Cells where a Cell from target 
column<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   * with the same timestamp do not exist 
will be dropped.<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   *<a name="line.94"></a>
+<span class="sourceLineNo">095</span>   * @param family name of dependent 
column family<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   * @param qualifier name of dependent 
qualifier<a name="line.96"></a>
+<span class="sourceLineNo">097</span>   * @param dropDependentColumn whether 
the dependent columns Cells should be discarded<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   */<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  public DependentColumnFilter(final byte 
[] family, final byte [] qualifier,<a name="line.99"></a>
+<span class="sourceLineNo">100</span>      final boolean dropDependentColumn) 
{<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    this(family, qualifier, 
dropDependentColumn, CompareOp.NO_OP, null);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  }<a name="line.102"></a>
+<span class="sourceLineNo">103</span><a name="line.103"></a>
+<span class="sourceLineNo">104</span>  /**<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   * @return the column family<a 
name="line.105"></a>
+<span class="sourceLineNo">106</span>   */<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  public byte[] getFamily() {<a 
name="line.107"></a>
+<span class="sourceLineNo">108</span>    return this.columnFamily;<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>  /**<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   * @return the column qualifier<a 
name="line.112"></a>
+<span class="sourceLineNo">113</span>   */<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  public byte[] getQualifier() {<a 
name="line.114"></a>
+<span class="sourceLineNo">115</span>    return this.columnQualifier;<a 
name="line.115"></a>
+<span class="sourceLineNo">116</span>  }<a name="line.116"></a>
+<span class="sourceLineNo">117</span><a name="line.117"></a>
+<span class="sourceLineNo">118</span>  /**<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   * @return true if we should drop the 
dependent column, false otherwise<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   */<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  public boolean dropDependentColumn() 
{<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    return this.dropDependentColumn;<a 
name="line.122"></a>
+<span class="sourceLineNo">123</span>  }<a name="line.123"></a>
+<span class="sourceLineNo">124</span><a name="line.124"></a>
+<span class="sourceLineNo">125</span>  public boolean getDropDependentColumn() 
{<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    return this.dropDependentColumn;<a 
name="line.126"></a>
+<span class="sourceLineNo">127</span>  }<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span>  @Override<a name="line.129"></a>
+<span class="sourceLineNo">130</span>  public boolean filterAllRemaining() {<a 
name="line.130"></a>
+<span class="sourceLineNo">131</span>    return false;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  }<a name="line.132"></a>
+<span class="sourceLineNo">133</span><a name="line.133"></a>
+<span class="sourceLineNo">134</span>  @Override<a name="line.134"></a>
+<span class="sourceLineNo">135</span>  public ReturnCode filterKeyValue(Cell 
c) {<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    // Check if the column and qualifier 
match<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    if (!CellUtil.matchingColumn(c, 
this.columnFamily, this.columnQualifier)) {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>        // include non-matches for the 
time being, they'll be discarded afterwards<a name="line.138"></a>
+<span class="sourceLineNo">139</span>        return ReturnCode.INCLUDE;<a 
name="line.139"></a>
+<span class="sourceLineNo">140</span>    }<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    // If it doesn't pass the op, skip 
it<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    if (comparator != null<a 
name="line.142"></a>
+<span class="sourceLineNo">143</span>        &amp;&amp; 
compareValue(compareOp, comparator, c))<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      return ReturnCode.SKIP;<a 
name="line.144"></a>
+<span class="sourceLineNo">145</span>  <a name="line.145"></a>
+<span class="sourceLineNo">146</span>    stampSet.add(c.getTimestamp());<a 
name="line.146"></a>
+<span class="sourceLineNo">147</span>    if(dropDependentColumn) {<a 
name="line.147"></a>
+<span class="sourceLineNo">148</span>      return ReturnCode.SKIP;<a 
name="line.148"></a>
+<span class="sourceLineNo">149</span>    }<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    return ReturnCode.INCLUDE;<a 
name="line.150"></a>
+<span class="sourceLineNo">151</span>  }<a name="line.151"></a>
+<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">153</span>  @Override<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  public void 
filterRowCells(List&lt;Cell&gt; kvs) {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    kvs.removeIf(kv -&gt; 
!stampSet.contains(kv.getTimestamp()));<a name="line.155"></a>
+<span class="sourceLineNo">156</span>  }<a name="line.156"></a>
+<span class="sourceLineNo">157</span><a name="line.157"></a>
+<span class="sourceLineNo">158</span>  @Override<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  public boolean hasFilterRow() {<a 
name="line.159"></a>
+<span class="sourceLineNo">160</span>    return true;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  }<a name="line.161"></a>
+<span class="sourceLineNo">162</span>  <a name="line.162"></a>
+<span class="sourceLineNo">163</span>  @Override<a name="line.163"></a>
+<span class="sourceLineNo">164</span>  public boolean filterRow() {<a 
name="line.164"></a>
+<span class="sourceLineNo">165</span>    return false;<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>  @Override<a name="line.168"></a>
+<span class="sourceLineNo">169</span>  public boolean filterRowKey(byte[] 
buffer, int offset, int length) {<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    return false;<a name="line.170"></a>
+<span class="sourceLineNo">171</span>  }<a name="line.171"></a>
+<span class="sourceLineNo">172</span>  @Override<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  public void reset() {<a 
name="line.173"></a>
+<span class="sourceLineNo">174</span>    stampSet.clear();    <a 
name="line.174"></a>
+<span class="sourceLineNo">175</span>  }<a name="line.175"></a>
+<span class="sourceLineNo">176</span><a name="line.176"></a>
+<span class="sourceLineNo">177</span>  public static Filter 
createFilterFromArguments(ArrayList&lt;byte []&gt; filterArguments) {<a 
name="line.177"></a>
+<span class="sourceLineNo">178</span>    
Preconditions.checkArgument(filterArguments.size() == 2 ||<a 
name="line.178"></a>
+<span class="sourceLineNo">179</span>                                
filterArguments.size() == 3 ||<a name="line.179"></a>
+<span class="sourceLineNo">180</span>                                
filterArguments.size() == 5,<a name="line.180"></a>
+<span class="sourceLineNo">181</span>                                "Expected 
2, 3 or 5 but got: %s", filterArguments.size());<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    if (filterArguments.size() == 2) {<a 
name="line.182"></a>
+<span class="sourceLineNo">183</span>      byte [] family = 
ParseFilter.removeQuotesFromByteArray(filterArguments.get(0));<a 
name="line.183"></a>
+<span class="sourceLineNo">184</span>      byte [] qualifier = 
ParseFilter.removeQuotesFromByteArray(filterArguments.get(1));<a 
name="line.184"></a>
+<span class="sourceLineNo">185</span>      return new 
DependentColumnFilter(family, qualifier);<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span>    } else if (filterArguments.size() == 
3) {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      byte [] family = 
ParseFilter.removeQuotesFromByteArray(filterArguments.get(0));<a 
name="line.188"></a>
+<span class="sourceLineNo">189</span>      byte [] qualifier = 
ParseFilter.removeQuotesFromByteArray(filterArguments.get(1));<a 
name="line.189"></a>
+<span class="sourceLineNo">190</span>      boolean dropDependentColumn = 
ParseFilter.convertByteArrayToBoolean(filterArguments.get(2));<a 
name="line.190"></a>
+<span class="sourceLineNo">191</span>      return new 
DependentColumnFilter(family, qualifier, dropDependentColumn);<a 
name="line.191"></a>
+<span class="sourceLineNo">192</span><a name="line.192"></a>
+<span class="sourceLineNo">193</span>    } else if (filterArguments.size() == 
5) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      byte [] family = 
ParseFilter.removeQuotesFromByteArray(filterArguments.get(0));<a 
name="line.194"></a>
+<span class="sourceLineNo">195</span>      byte [] qualifier = 
ParseFilter.removeQuotesFromByteArray(filterArguments.get(1));<a 
name="line.195"></a>
+<span class="sourceLineNo">196</span>      boolean dropDependentColumn = 
ParseFilter.convertByteArrayToBoolean(filterArguments.get(2));<a 
name="line.196"></a>
+<span class="sourceLineNo">197</span>      CompareOp compareOp = 
ParseFilter.createCompareOp(filterArguments.get(3));<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      ByteArrayComparable comparator = 
ParseFilter.createComparator(<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        
ParseFilter.removeQuotesFromByteArray(filterArguments.get(4)));<a 
name="line.199"></a>
+<span class="sourceLineNo">200</span>      return new 
DependentColumnFilter(family, qualifier, dropDependentColumn,<a 
name="line.200"></a>
+<span class="sourceLineNo">201</span>                                       
compareOp, comparator);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    } else {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      throw new 
IllegalArgumentException("Expected 2, 3 or 5 but got: " + 
filterArguments.size());<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><a name="line.206"></a>
+<span class="sourceLineNo">207</span>  /**<a name="line.207"></a>
+<span class="sourceLineNo">208</span>   * @return The filter serialized using 
pb<a name="line.208"></a>
+<span class="sourceLineNo">209</span>   */<a name="line.209"></a>
+<span class="sourceLineNo">210</span>  public byte [] toByteArray() {<a 
name="line.210"></a>
+<span class="sourceLineNo">211</span>    
FilterProtos.DependentColumnFilter.Builder builder =<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      
FilterProtos.DependentColumnFilter.newBuilder();<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    
builder.setCompareFilter(super.convert());<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    if (this.columnFamily != null) {<a 
name="line.214"></a>
+<span class="sourceLineNo">215</span>      
builder.setColumnFamily(UnsafeByteOperations.unsafeWrap(this.columnFamily));<a 
name="line.215"></a>
+<span class="sourceLineNo">216</span>    }<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    if (this.columnQualifier != null) {<a 
name="line.217"></a>
+<span class="sourceLineNo">218</span>      
builder.setColumnQualifier(UnsafeByteOperations.unsafeWrap(this.columnQualifier));<a
 name="line.218"></a>
+<span class="sourceLineNo">219</span>    }<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    
builder.setDropDependentColumn(this.dropDependentColumn);<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    return 
builder.build().toByteArray();<a name="line.221"></a>
+<span class="sourceLineNo">222</span>  }<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span>  /**<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   * @param pbBytes A pb serialized 
{@link DependentColumnFilter} instance<a name="line.225"></a>
+<span class="sourceLineNo">226</span>   * @return An instance of {@link 
DependentColumnFilter} made from &lt;code&gt;bytes&lt;/code&gt;<a 
name="line.226"></a>
+<span class="sourceLineNo">227</span>   * @throws DeserializationException<a 
name="line.227"></a>
+<span class="sourceLineNo">228</span>   * @see #toByteArray<a 
name="line.228"></a>
+<span class="sourceLineNo">229</span>   */<a name="line.229"></a>
+<span class="sourceLineNo">230</span>  public static DependentColumnFilter 
parseFrom(final byte [] pbBytes)<a name="line.230"></a>
+<span class="sourceLineNo">231</span>  throws DeserializationException {<a 
name="line.231"></a>
+<span class="sourceLineNo">232</span>    FilterProtos.DependentColumnFilter 
proto;<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    try {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      proto = 
FilterProtos.DependentColumnFilter.parseFrom(pbBytes);<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    } catch 
(InvalidProtocolBufferException e) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      throw new 
DeserializationException(e);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    }<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    final CompareOp valueCompareOp =<a 
name="line.238"></a>
+<span class="sourceLineNo">239</span>      
CompareOp.valueOf(proto.getCompareFilter().getCompareOp().name());<a 
name="line.239"></a>
+<span class="sourceLineNo">240</span>    ByteArrayComparable valueComparator = 
null;<a name="line.240"></a>
 <span class="sourceLineNo">241</span>    try {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>      proto = 
FilterProtos.DependentColumnFilter.parseFrom(pbBytes);<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    } catch 
(InvalidProtocolBufferException e) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      throw new 
DeserializationException(e);<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    }<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    final CompareOp valueCompareOp =<a 
name="line.246"></a>
-<span class="sourceLineNo">247</span>      
CompareOp.valueOf(proto.getCompareFilter().getCompareOp().name());<a 
name="line.247"></a>
-<span class="sourceLineNo">248</span>    ByteArrayComparable valueComparator = 
null;<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    try {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      if 
(proto.getCompareFilter().hasComparator()) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>        valueComparator = 
ProtobufUtil.toComparator(proto.getCompareFilter().getComparator());<a 
name="line.251"></a>
-<span class="sourceLineNo">252</span>      }<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    } catch (IOException ioe) {<a 
name="line.253"></a>
-<span class="sourceLineNo">254</span>      throw new 
DeserializationException(ioe);<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    }<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    return new DependentColumnFilter(<a 
name="line.256"></a>
-<span class="sourceLineNo">257</span>      
proto.hasColumnFamily()?proto.getColumnFamily().toByteArray():null,<a 
name="line.257"></a>
-<span class="sourceLineNo">258</span>      
proto.hasColumnQualifier()?proto.getColumnQualifier().toByteArray():null,<a 
name="line.258"></a>
-<span class="sourceLineNo">259</span>      proto.getDropDependentColumn(), 
valueCompareOp, valueComparator);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>  }<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>   * @param o<a name="line.263"></a>
-<span class="sourceLineNo">264</span>   * @return true if and only if the 
fields of the filter that are serialized<a name="line.264"></a>
-<span class="sourceLineNo">265</span>   * are equal to the corresponding 
fields in other.  Used for testing.<a name="line.265"></a>
-<span class="sourceLineNo">266</span>   */<a name="line.266"></a>
-<span class="sourceLineNo">267</span>  
@edu.umd.cs.findbugs.annotations.SuppressWarnings(<a name="line.267"></a>
-<span class="sourceLineNo">268</span>      
value="RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE")<a name="line.268"></a>
-<span class="sourceLineNo">269</span>  boolean areSerializedFieldsEqual(Filter 
o) {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    if (o == this) return true;<a 
name="line.270"></a>
-<span class="sourceLineNo">271</span>    if (!(o instanceof 
DependentColumnFilter)) return false;<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span>    DependentColumnFilter other = 
(DependentColumnFilter)o;<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    return other != null &amp;&amp; 
super.areSerializedFieldsEqual(other)<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      &amp;&amp; 
Bytes.equals(this.getFamily(), other.getFamily())<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      &amp;&amp; 
Bytes.equals(this.getQualifier(), other.getQualifier())<a name="line.276"></a>
-<span class="sourceLineNo">277</span>      &amp;&amp; 
this.dropDependentColumn() == other.dropDependentColumn();<a 
name="line.277"></a>
-<span class="sourceLineNo">278</span>  }<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span>  @Override<a name="line.280"></a>
-<span class="sourceLineNo">281</span>  public String toString() {<a 
name="line.281"></a>
-<span class="sourceLineNo">282</span>    return String.format("%s (%s, %s, %s, 
%s, %s)",<a name="line.282"></a>
-<span class="sourceLineNo">283</span>        
this.getClass().getSimpleName(),<a name="line.283"></a>
-<span class="sourceLineNo">284</span>        
Bytes.toStringBinary(this.columnFamily),<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        
Bytes.toStringBinary(this.columnQualifier),<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        this.dropDependentColumn,<a 
name="line.286"></a>
-<span class="sourceLineNo">287</span>        this.compareOp.name(),<a 
name="line.287"></a>
-<span class="sourceLineNo">288</span>        this.comparator != null ? 
Bytes.toStringBinary(this.comparator.getValue()) : "null");<a 
name="line.288"></a>
-<span class="sourceLineNo">289</span>  }<a name="line.289"></a>
-<span class="sourceLineNo">290</span>}<a name="line.290"></a>
+<span class="sourceLineNo">242</span>      if 
(proto.getCompareFilter().hasComparator()) {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>        valueComparator = 
ProtobufUtil.toComparator(proto.getCompareFilter().getComparator());<a 
name="line.243"></a>
+<span class="sourceLineNo">244</span>      }<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    } catch (IOException ioe) {<a 
name="line.245"></a>
+<span class="sourceLineNo">246</span>      throw new 
DeserializationException(ioe);<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    }<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    return new DependentColumnFilter(<a 
name="line.248"></a>
+<span class="sourceLineNo">249</span>      
proto.hasColumnFamily()?proto.getColumnFamily().toByteArray():null,<a 
name="line.249"></a>
+<span class="sourceLineNo">250</span>      
proto.hasColumnQualifier()?proto.getColumnQualifier().toByteArray():null,<a 
name="line.250"></a>
+<span class="sourceLineNo">251</span>      proto.getDropDependentColumn(), 
valueCompareOp, valueComparator);<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>   * @param o<a name="line.255"></a>
+<span class="sourceLineNo">256</span>   * @return true if and only if the 
fields of the filter that are serialized<a name="line.256"></a>
+<span class="sourceLineNo">257</span>   * are equal to the corresponding 
fields in other.  Used for testing.<a name="line.257"></a>
+<span class="sourceLineNo">258</span>   */<a name="line.258"></a>
+<span class="sourceLineNo">259</span>  
@edu.umd.cs.findbugs.annotations.SuppressWarnings(<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      
value="RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE")<a name="line.260"></a>
+<span class="sourceLineNo">261</span>  boolean areSerializedFieldsEqual(Filter 
o) {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    if (o == this) return true;<a 
name="line.262"></a>
+<span class="sourceLineNo">263</span>    if (!(o instanceof 
DependentColumnFilter)) return false;<a name="line.263"></a>
+<span class="sourceLineNo">264</span><a name="line.264"></a>
+<span class="sourceLineNo">265</span>    DependentColumnFilter other = 
(DependentColumnFilter)o;<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    return other != null &amp;&amp; 
super.areSerializedFieldsEqual(other)<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      &amp;&amp; 
Bytes.equals(this.getFamily(), other.getFamily())<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      &amp;&amp; 
Bytes.equals(this.getQualifier(), other.getQualifier())<a name="line.268"></a>
+<span class="sourceLineNo">269</span>      &amp;&amp; 
this.dropDependentColumn() == other.dropDependentColumn();<a 
name="line.269"></a>
+<span class="sourceLineNo">270</span>  }<a name="line.270"></a>
+<span class="sourceLineNo">271</span><a name="line.271"></a>
+<span class="sourceLineNo">272</span>  @Override<a name="line.272"></a>
+<span class="sourceLineNo">273</span>  public String toString() {<a 
name="line.273"></a>
+<span class="sourceLineNo">274</span>    return String.format("%s (%s, %s, %s, 
%s, %s)",<a name="line.274"></a>
+<span class="sourceLineNo">275</span>        
this.getClass().getSimpleName(),<a name="line.275"></a>
+<span class="sourceLineNo">276</span>        
Bytes.toStringBinary(this.columnFamily),<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        
Bytes.toStringBinary(this.columnQualifier),<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        this.dropDependentColumn,<a 
name="line.278"></a>
+<span class="sourceLineNo">279</span>        this.compareOp.name(),<a 
name="line.279"></a>
+<span class="sourceLineNo">280</span>        this.comparator != null ? 
Bytes.toStringBinary(this.comparator.getValue()) : "null");<a 
name="line.280"></a>
+<span class="sourceLineNo">281</span>  }<a name="line.281"></a>
+<span class="sourceLineNo">282</span>}<a name="line.282"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2aec596e/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/Import.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/Import.html 
b/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/Import.html
index 34804f6..98d5be0 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/Import.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/Import.html
@@ -362,7 +362,7 @@
 <span class="sourceLineNo">354</span>         */<a name="line.354"></a>
 <span class="sourceLineNo">355</span>        if (CellUtil.isDeleteFamily(kv)) 
{<a name="line.355"></a>
 <span class="sourceLineNo">356</span>          Delete deleteFamily = new 
Delete(key.get());<a name="line.356"></a>
-<span class="sourceLineNo">357</span>          
deleteFamily.addDeleteMarker(kv);<a name="line.357"></a>
+<span class="sourceLineNo">357</span>          deleteFamily.add(kv);<a 
name="line.357"></a>
 <span class="sourceLineNo">358</span>          if (durability != null) {<a 
name="line.358"></a>
 <span class="sourceLineNo">359</span>            
deleteFamily.setDurability(durability);<a name="line.359"></a>
 <span class="sourceLineNo">360</span>          }<a name="line.360"></a>
@@ -372,7 +372,7 @@
 <span class="sourceLineNo">364</span>          if (delete == null) {<a 
name="line.364"></a>
 <span class="sourceLineNo">365</span>            delete = new 
Delete(key.get());<a name="line.365"></a>
 <span class="sourceLineNo">366</span>          }<a name="line.366"></a>
-<span class="sourceLineNo">367</span>          delete.addDeleteMarker(kv);<a 
name="line.367"></a>
+<span class="sourceLineNo">367</span>          delete.add(kv);<a 
name="line.367"></a>
 <span class="sourceLineNo">368</span>        } else {<a name="line.368"></a>
 <span class="sourceLineNo">369</span>          if (put == null) {<a 
name="line.369"></a>
 <span class="sourceLineNo">370</span>            put = new Put(key.get());<a 
name="line.370"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2aec596e/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.html 
b/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.html
index 1d3134a..7ec977c 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.html
@@ -190,7 +190,7 @@
 <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>              if 
(CellUtil.isDelete(cell)) {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>                
del.addDeleteMarker(cell);<a name="line.185"></a>
+<span class="sourceLineNo">185</span>                del.add(cell);<a 
name="line.185"></a>
 <span class="sourceLineNo">186</span>              } else {<a 
name="line.186"></a>
 <span class="sourceLineNo">187</span>                put.add(cell);<a 
name="line.187"></a>
 <span class="sourceLineNo">188</span>              }<a name="line.188"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2aec596e/book.html
----------------------------------------------------------------------
diff --git a/book.html b/book.html
index 4c13d51..212e336 100644
--- a/book.html
+++ b/book.html
@@ -30781,10 +30781,8 @@ serialization/deserialization.</p>
 <p>In hbase-2.0.0, we introduced a new module, 
<code>hbase-protocol-shaded</code>
 inside which we contained all to do with protobuf and its subsequent
 relocation/shading. This module is in essence a copy of much of the old
-<code>hbase-protocol</code> but with an extra shading/relocation step (see the 
<code>README.txt</code>
-and the <code>poms.xml</code> in this module for more on how to trigger this
-effect and how it all works). Core was moved to depend on this new
-module.</p>
+<code>hbase-protocol</code> but with an extra shading/relocation step.
+Core was moved to depend on this new module.</p>
 </div>
 <div class="paragraph">
 <p>That said, a complication arises around Coprocessor Endpoints (CPEPs).
@@ -30813,9 +30811,7 @@ HBase needs to be able to deal with both
 </div>
 <div class="paragraph">
 <p>The <code>hbase-protocol-shaded</code> module hosts all
-protobufs used by HBase core as well as the internal shaded version of
-protobufs that hbase depends on. hbase-client and hbase-server, etc.,
-depend on this module.</p>
+protobufs used by HBase core.</p>
 </div>
 <div class="paragraph">
 <p>But for the vestigial CPEP references to the (non-shaded) content of
@@ -31599,7 +31595,7 @@ JIRA and add a version number to the name of the new 
patch.</p>
 <div class="sect2">
 <h3 id="_editing_the_hbase_website"><a class="anchor" 
href="#_editing_the_hbase_website"></a>A.2. Editing the HBase Website</h3>
 <div class="paragraph">
-<p>The source for the HBase website is in the HBase source, in the 
<em>src/main/site/</em> directory.
+<p>The source for the HBase website is in the HBase source, in the 
<em>src/site/</em> directory.
 Within this directory, source for the individual pages is in the 
<em>xdocs/</em> directory,
 and images referenced in those pages are in the <em>resources/images/</em> 
directory.
 This directory also stores images used in the HBase Reference Guide.</p>
@@ -31813,7 +31809,7 @@ include\::path/to/app.rb[]
 </div>
 </div>
 <div class="paragraph">
-<p>(put the image in the src/main/site/resources/images directory)</p>
+<p>(put the image in the src/site/resources/images directory)</p>
 </div></div></td>
 </tr>
 <tr>
@@ -32104,7 +32100,7 @@ Inline images cannot have titles. They are generally 
small images like GUI butto
 </div>
 </div>
 <div class="paragraph">
-<p>When doing a local build, save the image to the 
<em>src/main/site/resources/images/</em> directory.
+<p>When doing a local build, save the image to the 
<em>src/site/resources/images/</em> directory.
 When you link to the image, do not include the directory portion of the path.
 The image will be copied to the appropriate target location during the build 
of the output.</p>
 </div>
@@ -35009,7 +35005,7 @@ The server will return cellblocks compressed using this 
same compressor as long
 <div id="footer">
 <div id="footer-text">
 Version 3.0.0-SNAPSHOT<br>
-Last updated 2017-08-02 14:32:39 UTC
+Last updated 2017-07-18 21:29:11 UTC
 </div>
 </div>
 </body>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2aec596e/bulk-loads.html
----------------------------------------------------------------------
diff --git a/bulk-loads.html b/bulk-loads.html
index af289a9..c917dc3 100644
--- a/bulk-loads.html
+++ b/bulk-loads.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20170802" />
+    <meta name="Date-Revision-yyyymmdd" content="20170809" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Bulk Loads in Apache HBase (TM)
@@ -311,7 +311,7 @@ under the License. -->
                         <a href="https://www.apache.org/";>The Apache Software 
Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 
2017-08-02</li>
+                  <li id="publishDate" class="pull-right">Last Published: 
2017-08-09</li>
             </p>
                 </div>
 

Reply via email to