You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by re...@apache.org on 2018/08/23 16:23:45 UTC

hbase git commit: HBASE-19008 Add missing equals or hashCode method(s) to stock Filter implementations

Repository: hbase
Updated Branches:
  refs/heads/master 6a5b4f2a5 -> 72b36e1d9


HBASE-19008 Add missing equals or hashCode method(s) to stock Filter implementations

Signed-off-by: Reid Chan <re...@apache.org>
Signed-off-by: Ted Yu <yu...@gmail.com>


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/72b36e1d
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/72b36e1d
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/72b36e1d

Branch: refs/heads/master
Commit: 72b36e1d9aa6b10508b6d87a02fbf7d4ead2d2a2
Parents: 6a5b4f2
Author: liubangchen <li...@tencent.com>
Authored: Thu Aug 23 11:19:17 2018 +0800
Committer: Reid Chan <re...@apache.org>
Committed: Fri Aug 24 00:22:22 2018 +0800

----------------------------------------------------------------------
 .../hbase/filter/ColumnCountGetFilter.java      | 15 ++++++
 .../hbase/filter/ColumnPaginationFilter.java    | 15 ++++++
 .../hadoop/hbase/filter/ColumnPrefixFilter.java | 15 ++++++
 .../hadoop/hbase/filter/ColumnRangeFilter.java  | 16 ++++++
 .../hadoop/hbase/filter/ColumnValueFilter.java  | 16 ++++++
 .../hadoop/hbase/filter/CompareFilter.java      | 15 ++++++
 .../hbase/filter/DependentColumnFilter.java     | 16 ++++++
 .../hadoop/hbase/filter/FamilyFilter.java       | 15 ++++++
 .../apache/hadoop/hbase/filter/FilterList.java  | 14 ++++++
 .../hadoop/hbase/filter/FilterListWithAND.java  | 19 +++++++
 .../hadoop/hbase/filter/FilterListWithOR.java   | 23 +++++++++
 .../FirstKeyValueMatchingQualifiersFilter.java  | 15 ++++++
 .../hadoop/hbase/filter/FuzzyRowFilter.java     | 15 ++++++
 .../hbase/filter/InclusiveStopFilter.java       | 15 ++++++
 .../hadoop/hbase/filter/KeyOnlyFilter.java      | 16 ++++++
 .../hbase/filter/MultiRowRangeFilter.java       | 38 ++++++++++++++
 .../filter/MultipleColumnPrefixFilter.java      | 16 ++++++
 .../apache/hadoop/hbase/filter/PageFilter.java  | 15 ++++++
 .../hadoop/hbase/filter/PrefixFilter.java       | 15 ++++++
 .../hadoop/hbase/filter/QualifierFilter.java    | 15 ++++++
 .../hadoop/hbase/filter/RandomRowFilter.java    | 15 ++++++
 .../apache/hadoop/hbase/filter/RowFilter.java   | 15 ++++++
 .../hbase/filter/SingleColumnValueFilter.java   | 16 ++++++
 .../apache/hadoop/hbase/filter/SkipFilter.java  | 15 ++++++
 .../hadoop/hbase/filter/TimestampsFilter.java   | 15 ++++++
 .../apache/hadoop/hbase/filter/ValueFilter.java | 15 ++++++
 .../hadoop/hbase/filter/WhileMatchFilter.java   | 15 ++++++
 .../security/access/AccessControlFilter.java    | 23 +++++++++
 .../visibility/VisibilityController.java        | 17 +++++++
 .../visibility/VisibilityLabelFilter.java       | 18 +++++++
 .../hbase/client/ColumnCountOnRowFilter.java    | 18 +++++++
 .../apache/hadoop/hbase/filter/TestFilter.java  |  1 +
 .../hadoop/hbase/filter/TestFilterList.java     | 53 ++++++++++++++++++++
 .../hbase/spark/SparkSQLPushDownFilter.java     | 32 ++++++++++++
 34 files changed, 607 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/72b36e1d/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/ColumnCountGetFilter.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/ColumnCountGetFilter.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/ColumnCountGetFilter.java
index 3aaac36..3cf6675 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/ColumnCountGetFilter.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/ColumnCountGetFilter.java
@@ -21,6 +21,7 @@ package org.apache.hadoop.hbase.filter;
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Objects;
 
 import org.apache.hadoop.hbase.Cell;
 import org.apache.yetus.audience.InterfaceAudience;
@@ -132,4 +133,18 @@ public class ColumnCountGetFilter extends FilterBase {
   public String toString() {
     return this.getClass().getSimpleName() + " " + this.limit;
   }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj == null || (!(obj instanceof ColumnCountGetFilter))) {
+      return false;
+    }
+    ColumnCountGetFilter f = (ColumnCountGetFilter) obj;
+    return this.areSerializedFieldsEqual(f);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(this.limit);
+  }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/72b36e1d/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/ColumnPaginationFilter.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/ColumnPaginationFilter.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/ColumnPaginationFilter.java
index c90047d..4f592e9 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/ColumnPaginationFilter.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/ColumnPaginationFilter.java
@@ -20,6 +20,7 @@ package org.apache.hadoop.hbase.filter;
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Objects;
 
 import org.apache.hadoop.hbase.Cell;
 import org.apache.hadoop.hbase.CellUtil;
@@ -230,4 +231,18 @@ public class ColumnPaginationFilter extends FilterBase {
     return String.format("%s (%d, %d)", this.getClass().getSimpleName(),
         this.limit, this.offset);
   }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj == null || (!(obj instanceof ColumnPaginationFilter))) {
+      return false;
+    }
+    ColumnPaginationFilter f = (ColumnPaginationFilter) obj;
+    return this.areSerializedFieldsEqual(f);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(this.limit, this.offset);
+  }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/72b36e1d/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/ColumnPrefixFilter.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/ColumnPrefixFilter.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/ColumnPrefixFilter.java
index a403a40..322cce1 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/ColumnPrefixFilter.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/ColumnPrefixFilter.java
@@ -21,6 +21,7 @@ package org.apache.hadoop.hbase.filter;
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Objects;
 
 import org.apache.hadoop.hbase.ByteBufferExtendedCell;
 import org.apache.hadoop.hbase.Cell;
@@ -161,4 +162,18 @@ public class ColumnPrefixFilter extends FilterBase {
   public String toString() {
     return this.getClass().getSimpleName() + " " + Bytes.toStringBinary(this.prefix);
   }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj == null || (!(obj instanceof ColumnPrefixFilter))) {
+      return false;
+    }
+    ColumnPrefixFilter f = (ColumnPrefixFilter) obj;
+    return this.areSerializedFieldsEqual(f);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(Bytes.hashCode(this.getPrefix()));
+  }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/72b36e1d/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/ColumnRangeFilter.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/ColumnRangeFilter.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/ColumnRangeFilter.java
index f981ed7..5b30785 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/ColumnRangeFilter.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/ColumnRangeFilter.java
@@ -23,6 +23,7 @@ import static org.apache.hadoop.hbase.util.Bytes.len;
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Objects;
 
 import org.apache.hadoop.hbase.Cell;
 import org.apache.hadoop.hbase.CellUtil;
@@ -239,4 +240,19 @@ public class ColumnRangeFilter extends FilterBase {
         + ", " + Bytes.toStringBinary(this.maxColumn)
         + (this.maxColumnInclusive ? "]" : ")");
   }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj == null || (!(obj instanceof ColumnRangeFilter))) {
+      return false;
+    }
+    ColumnRangeFilter f = (ColumnRangeFilter) obj;
+    return this.areSerializedFieldsEqual(f);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(Bytes.toStringBinary(this.getMinColumn()), this.getMinColumnInclusive(),
+        Bytes.toStringBinary(this.getMaxColumn()), this.getMaxColumnInclusive());
+  }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/72b36e1d/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/ColumnValueFilter.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/ColumnValueFilter.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/ColumnValueFilter.java
index 0795165..c33d50e 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/ColumnValueFilter.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/ColumnValueFilter.java
@@ -21,6 +21,7 @@ package org.apache.hadoop.hbase.filter;
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Objects;
 
 import org.apache.hadoop.hbase.Cell;
 import org.apache.hadoop.hbase.CellUtil;
@@ -238,4 +239,19 @@ public class ColumnValueFilter extends FilterBase {
       Bytes.toStringBinary(this.qualifier), this.op.name(),
       Bytes.toStringBinary(this.comparator.getValue()));
   }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj == null || (!(obj instanceof ColumnValueFilter))) {
+      return false;
+    }
+    ColumnValueFilter f = (ColumnValueFilter) obj;
+    return this.areSerializedFieldsEqual(f);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(Bytes.hashCode(this.getFamily()), Bytes.hashCode(this.getQualifier()),
+        this.getCompareOperator(), this.getComparator());
+  }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/72b36e1d/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/CompareFilter.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/CompareFilter.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/CompareFilter.java
index 50924ec..73c60fd 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/CompareFilter.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/CompareFilter.java
@@ -21,6 +21,7 @@ package org.apache.hadoop.hbase.filter;
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Objects;
 
 import org.apache.hadoop.hbase.Cell;
 import org.apache.hadoop.hbase.CompareOperator;
@@ -321,4 +322,18 @@ public abstract class CompareFilter extends FilterBase {
         this.op.name(),
         Bytes.toStringBinary(this.comparator.getValue()));
   }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj == null || (!(obj instanceof CompareFilter))) {
+      return false;
+    }
+    CompareFilter f = (CompareFilter) obj;
+    return this.areSerializedFieldsEqual(f);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(this.getComparator(), this.getCompareOperator());
+  }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/72b36e1d/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/DependentColumnFilter.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/DependentColumnFilter.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/DependentColumnFilter.java
index 8f5dee7..f5912e1 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/DependentColumnFilter.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/DependentColumnFilter.java
@@ -22,6 +22,7 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Objects;
 import java.util.Set;
 
 import org.apache.hadoop.hbase.Cell;
@@ -311,4 +312,19 @@ public class DependentColumnFilter extends CompareFilter {
         this.op.name(),
         this.comparator != null ? Bytes.toStringBinary(this.comparator.getValue()) : "null");
   }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj == null || (!(obj instanceof DependentColumnFilter))) {
+      return false;
+    }
+    DependentColumnFilter f = (DependentColumnFilter) obj;
+    return this.areSerializedFieldsEqual(f);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(Bytes.hashCode(this.getFamily()), Bytes.hashCode(this.getQualifier()),
+        this.dropDependentColumn());
+  }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/72b36e1d/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FamilyFilter.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FamilyFilter.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FamilyFilter.java
index f114e98..5892c32 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FamilyFilter.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FamilyFilter.java
@@ -21,6 +21,7 @@ package org.apache.hadoop.hbase.filter;
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Objects;
 
 import org.apache.hadoop.hbase.Cell;
 import org.apache.hadoop.hbase.CompareOperator;
@@ -146,4 +147,18 @@ public class FamilyFilter extends CompareFilter {
     FamilyFilter other = (FamilyFilter)o;
     return super.areSerializedFieldsEqual(other);
  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj == null || (!(obj instanceof FamilyFilter))) {
+      return false;
+    }
+    FamilyFilter f = (FamilyFilter) obj;
+    return this.areSerializedFieldsEqual(f);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(this.getComparator(), this.getCompareOperator());
+  }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/72b36e1d/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FilterList.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FilterList.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FilterList.java
index c549eab..f8be2f6 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FilterList.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FilterList.java
@@ -23,6 +23,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
+import java.util.Objects;
 
 import org.apache.hadoop.hbase.Cell;
 import org.apache.yetus.audience.InterfaceAudience;
@@ -276,4 +277,17 @@ final public class FilterList extends FilterBase {
   public String toString() {
     return this.filterListBase.toString();
   }
+  @Override
+  public boolean equals(Object obj) {
+    if (obj == null || (!(obj instanceof FilterList))) {
+      return false;
+    }
+    FilterList f = (FilterList) obj;
+    return this.areSerializedFieldsEqual(f);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(this.getOperator(), Arrays.hashCode(this.getFilters().toArray()));
+  }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/72b36e1d/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FilterListWithAND.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FilterListWithAND.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FilterListWithAND.java
index ebff3a5..65b641b 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FilterListWithAND.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FilterListWithAND.java
@@ -24,8 +24,10 @@ import org.apache.yetus.audience.InterfaceAudience;
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * FilterListWithAND represents an ordered list of filters which will be evaluated with an AND
@@ -279,4 +281,21 @@ public class FilterListWithAND extends FilterListBase {
     }
     return maxHint;
   }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj == null || (!(obj instanceof FilterListWithAND))) {
+      return false;
+    }
+    if (this == obj) {
+      return true;
+    }
+    FilterListWithAND f = (FilterListWithAND) obj;
+    return this.filters.equals(f.getFilters()) && this.seekHintFilters.equals(f.seekHintFilters);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(this.seekHintFilters, Arrays.hashCode(this.filters.toArray()));
+  }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/72b36e1d/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FilterListWithOR.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FilterListWithOR.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FilterListWithOR.java
index 064dd83..a51daa7 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FilterListWithOR.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FilterListWithOR.java
@@ -26,8 +26,10 @@ import org.apache.yetus.audience.InterfaceAudience;
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * FilterListWithOR represents an ordered list of filters which will be evaluated with an OR
@@ -391,4 +393,25 @@ public class FilterListWithOR extends FilterListBase {
     }
     return minKeyHint;
   }
+
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj == null || (!(obj instanceof FilterListWithOR))) {
+      return false;
+    }
+    if (this == obj) {
+      return true;
+    }
+    FilterListWithOR f = (FilterListWithOR) obj;
+    return this.filters.equals(f.getFilters()) &&
+        this.prevFilterRCList.equals(f.prevFilterRCList) &&
+        this.prevCellList.equals(f.prevCellList);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(Arrays.hashCode(this.prevFilterRCList.toArray()),
+        Arrays.hashCode(this.prevCellList.toArray()), Arrays.hashCode(this.filters.toArray()));
+  }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/72b36e1d/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FirstKeyValueMatchingQualifiersFilter.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FirstKeyValueMatchingQualifiersFilter.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FirstKeyValueMatchingQualifiersFilter.java
index 88dc36a..4775643 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FirstKeyValueMatchingQualifiersFilter.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FirstKeyValueMatchingQualifiersFilter.java
@@ -18,6 +18,7 @@
 
 package org.apache.hadoop.hbase.filter;
 
+import java.util.Objects;
 import java.util.Set;
 import java.util.TreeSet;
 
@@ -133,4 +134,18 @@ public class FirstKeyValueMatchingQualifiersFilter extends FirstKeyOnlyFilter {
     FirstKeyValueMatchingQualifiersFilter other = (FirstKeyValueMatchingQualifiersFilter)o;
     return this.qualifiers.equals(other.qualifiers);
   }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj == null || (!(obj instanceof FirstKeyValueMatchingQualifiersFilter))) {
+      return false;
+    }
+    FirstKeyValueMatchingQualifiersFilter f = (FirstKeyValueMatchingQualifiersFilter) obj;
+    return this.areSerializedFieldsEqual(f);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(this.qualifiers);
+  }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/72b36e1d/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FuzzyRowFilter.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FuzzyRowFilter.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FuzzyRowFilter.java
index 714c550..0db070e 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FuzzyRowFilter.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FuzzyRowFilter.java
@@ -21,6 +21,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Comparator;
 import java.util.List;
+import java.util.Objects;
 import java.util.PriorityQueue;
 
 import org.apache.hadoop.hbase.Cell;
@@ -646,4 +647,18 @@ public class FuzzyRowFilter extends FilterBase {
     }
     return true;
   }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj == null || (!(obj instanceof FuzzyRowFilter))) {
+      return false;
+    }
+    FuzzyRowFilter f = (FuzzyRowFilter) obj;
+    return this.areSerializedFieldsEqual(f);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(this.fuzzyKeysData.toArray());
+  }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/72b36e1d/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/InclusiveStopFilter.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/InclusiveStopFilter.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/InclusiveStopFilter.java
index 3756499..0e1749a 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/InclusiveStopFilter.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/InclusiveStopFilter.java
@@ -20,6 +20,7 @@
 package org.apache.hadoop.hbase.filter;
 
 import java.util.ArrayList;
+import java.util.Objects;
 
 import org.apache.hadoop.hbase.Cell;
 import org.apache.hadoop.hbase.CellComparator;
@@ -131,4 +132,18 @@ public class InclusiveStopFilter extends FilterBase {
   public String toString() {
     return this.getClass().getSimpleName() + " " + Bytes.toStringBinary(this.stopRowKey);
   }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj == null || (!(obj instanceof InclusiveStopFilter))) {
+      return false;
+    }
+    InclusiveStopFilter f = (InclusiveStopFilter) obj;
+    return this.areSerializedFieldsEqual(f);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(Bytes.hashCode(this.stopRowKey));
+  }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/72b36e1d/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/KeyOnlyFilter.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/KeyOnlyFilter.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/KeyOnlyFilter.java
index a66441b..cb74f8e 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/KeyOnlyFilter.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/KeyOnlyFilter.java
@@ -23,7 +23,9 @@ import java.nio.ByteBuffer;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Iterator;
+import java.util.Objects;
 import java.util.Optional;
+
 import org.apache.hadoop.hbase.ByteBufferExtendedCell;
 import org.apache.hadoop.hbase.Cell;
 import org.apache.hadoop.hbase.HConstants;
@@ -133,6 +135,20 @@ public class KeyOnlyFilter extends FilterBase {
     return this.lenAsVal == other.lenAsVal;
   }
 
+  @Override
+  public boolean equals(Object obj) {
+    if (obj == null || (!(obj instanceof KeyOnlyFilter))) {
+      return false;
+    }
+    KeyOnlyFilter f = (KeyOnlyFilter) obj;
+    return this.areSerializedFieldsEqual(f);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(this.lenAsVal);
+  }
+
   static class KeyOnlyCell implements Cell {
     private Cell cell;
     private boolean lenAsVal;

http://git-wip-us.apache.org/repos/asf/hbase/blob/72b36e1d/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/MultiRowRangeFilter.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/MultiRowRangeFilter.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/MultiRowRangeFilter.java
index dfd6297..00753ae 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/MultiRowRangeFilter.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/MultiRowRangeFilter.java
@@ -20,6 +20,7 @@ package org.apache.hadoop.hbase.filter;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.Objects;
 
 import org.apache.hadoop.hbase.Cell;
 import org.apache.hadoop.hbase.CellUtil;
@@ -512,5 +513,42 @@ public class MultiRowRangeFilter extends FilterBase {
           || Bytes.compareTo(startRow, stopRow) < 0
           || (Bytes.compareTo(startRow, stopRow) == 0 && stopRowInclusive == true);
     }
+
+    @Override
+    public boolean equals(Object obj){
+      if (obj == null || (!(obj instanceof RowRange))) {
+        return false;
+      }
+      if (this == obj) {
+        return true;
+      }
+      RowRange rr = (RowRange) obj;
+      return Bytes.equals(this.stopRow, rr.getStopRow()) &&
+          Bytes.equals(this.startRow, this.getStartRow()) &&
+          this.startRowInclusive == rr.isStartRowInclusive() &&
+          this.stopRowInclusive == rr.isStopRowInclusive();
+    }
+
+    @Override
+    public int hashCode() {
+      return Objects.hash(Bytes.hashCode(this.stopRow),
+          Bytes.hashCode(this.startRow),
+          this.startRowInclusive,
+          this.stopRowInclusive);
+    }
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj == null || (!(obj instanceof MultiRowRangeFilter))) {
+      return false;
+    }
+    MultiRowRangeFilter f = (MultiRowRangeFilter) obj;
+    return this.areSerializedFieldsEqual(f);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(this.rangeList.toArray());
   }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/72b36e1d/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/MultipleColumnPrefixFilter.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/MultipleColumnPrefixFilter.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/MultipleColumnPrefixFilter.java
index 47feea7..ec69ae2 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/MultipleColumnPrefixFilter.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/MultipleColumnPrefixFilter.java
@@ -19,7 +19,9 @@ package org.apache.hadoop.hbase.filter;
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Comparator;
+import java.util.Objects;
 import java.util.TreeSet;
 
 import org.apache.hadoop.hbase.Cell;
@@ -207,4 +209,18 @@ public class MultipleColumnPrefixFilter extends FilterBase {
     return String.format("%s (%d/%d): [%s]", this.getClass().getSimpleName(),
         count, this.sortedPrefixes.size(), prefixes.toString());
   }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj == null || (!(obj instanceof MultipleColumnPrefixFilter))) {
+      return false;
+    }
+    MultipleColumnPrefixFilter f = (MultipleColumnPrefixFilter) obj;
+    return this.areSerializedFieldsEqual(f);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(Arrays.hashCode(this.sortedPrefixes.toArray()));
+  }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/72b36e1d/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/PageFilter.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/PageFilter.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/PageFilter.java
index 30ddf24..06f777d 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/PageFilter.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/PageFilter.java
@@ -20,6 +20,7 @@ package org.apache.hadoop.hbase.filter;
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Objects;
 
 import org.apache.hadoop.hbase.Cell;
 import org.apache.hadoop.hbase.exceptions.DeserializationException;
@@ -150,4 +151,18 @@ public class PageFilter extends FilterBase {
   public String toString() {
     return this.getClass().getSimpleName() + " " + this.pageSize;
   }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj == null || (!(obj instanceof PageFilter))) {
+      return false;
+    }
+    PageFilter f = (PageFilter) obj;
+    return this.areSerializedFieldsEqual(f);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(this.pageSize);
+  }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/72b36e1d/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/PrefixFilter.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/PrefixFilter.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/PrefixFilter.java
index df9177b..e243933 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/PrefixFilter.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/PrefixFilter.java
@@ -20,6 +20,7 @@
 package org.apache.hadoop.hbase.filter;
 
 import java.util.ArrayList;
+import java.util.Objects;
 
 import org.apache.hadoop.hbase.ByteBufferExtendedCell;
 import org.apache.hadoop.hbase.Cell;
@@ -156,4 +157,18 @@ public class PrefixFilter extends FilterBase {
   public String toString() {
     return this.getClass().getSimpleName() + " " + Bytes.toStringBinary(this.prefix);
   }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj == null || (!(obj instanceof PrefixFilter))) {
+      return false;
+    }
+    PrefixFilter f = (PrefixFilter) obj;
+    return this.areSerializedFieldsEqual(f);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(Bytes.hashCode(this.getPrefix()));
+  }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/72b36e1d/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/QualifierFilter.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/QualifierFilter.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/QualifierFilter.java
index b38c010..da822ec 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/QualifierFilter.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/QualifierFilter.java
@@ -21,6 +21,7 @@ package org.apache.hadoop.hbase.filter;
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Objects;
 
 import org.apache.hadoop.hbase.Cell;
 import org.apache.hadoop.hbase.CompareOperator;
@@ -143,4 +144,18 @@ public class QualifierFilter extends CompareFilter {
 
     return super.areSerializedFieldsEqual(o);
   }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj == null || (!(obj instanceof QualifierFilter))) {
+      return false;
+    }
+    QualifierFilter f = (QualifierFilter) obj;
+    return this.areSerializedFieldsEqual(f);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(this.getComparator(), this.getCompareOperator());
+  }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/72b36e1d/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/RandomRowFilter.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/RandomRowFilter.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/RandomRowFilter.java
index 58624d2..2fca487 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/RandomRowFilter.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/RandomRowFilter.java
@@ -19,6 +19,7 @@
 
 package org.apache.hadoop.hbase.filter;
 
+import java.util.Objects;
 import java.util.Random;
 
 import org.apache.hadoop.hbase.Cell;
@@ -154,4 +155,18 @@ public class RandomRowFilter extends FilterBase {
     RandomRowFilter other = (RandomRowFilter)o;
     return this.getChance() == other.getChance();
   }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj == null || (!(obj instanceof RandomRowFilter))) {
+      return false;
+    }
+    RandomRowFilter f = (RandomRowFilter) obj;
+    return this.areSerializedFieldsEqual(f);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(this.getChance());
+  }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/72b36e1d/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/RowFilter.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/RowFilter.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/RowFilter.java
index 8eba3ba..e106a56 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/RowFilter.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/RowFilter.java
@@ -21,6 +21,7 @@ package org.apache.hadoop.hbase.filter;
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Objects;
 
 import org.apache.hadoop.hbase.Cell;
 import org.apache.hadoop.hbase.CompareOperator;
@@ -160,4 +161,18 @@ public class RowFilter extends CompareFilter {
 
     return super.areSerializedFieldsEqual(o);
   }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj == null || (!(obj instanceof RowFilter))) {
+      return false;
+    }
+    RowFilter f = (RowFilter) obj;
+    return this.areSerializedFieldsEqual(f);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(this.getComparator(), this.getCompareOperator());
+  }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/72b36e1d/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/SingleColumnValueFilter.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/SingleColumnValueFilter.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/SingleColumnValueFilter.java
index e5c83b1..45cc965 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/SingleColumnValueFilter.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/SingleColumnValueFilter.java
@@ -21,6 +21,7 @@ package org.apache.hadoop.hbase.filter;
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Objects;
 
 import org.apache.hadoop.hbase.Cell;
 import org.apache.hadoop.hbase.CellUtil;
@@ -460,4 +461,19 @@ public class SingleColumnValueFilter extends FilterBase {
         Bytes.toStringBinary(this.columnQualifier), this.op.name(),
         Bytes.toStringBinary(this.comparator.getValue()));
   }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj == null || (!(SingleColumnValueFilter.class.isInstance(obj)))) {
+      return false;
+    }
+    SingleColumnValueFilter f = (SingleColumnValueFilter) obj;
+    return this.areSerializedFieldsEqual(f);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(Bytes.hashCode(this.getFamily()), Bytes.hashCode(this.getQualifier()),
+      this.op, this.getComparator(), this.getFilterIfMissing(), this.getLatestVersionOnly());
+  }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/72b36e1d/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/SkipFilter.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/SkipFilter.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/SkipFilter.java
index c710548..2db6aba 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/SkipFilter.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/SkipFilter.java
@@ -20,6 +20,7 @@
 package org.apache.hadoop.hbase.filter;
 
 import java.io.IOException;
+import java.util.Objects;
 
 import org.apache.hadoop.hbase.Cell;
 import org.apache.yetus.audience.InterfaceAudience;
@@ -161,4 +162,18 @@ public class SkipFilter extends FilterBase {
   public String toString() {
     return this.getClass().getSimpleName() + " " + this.filter.toString();
   }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj == null || (!(obj.getClass() == this.getClass()))) {
+      return false;
+    }
+    SkipFilter f = (SkipFilter) obj;
+    return this.areSerializedFieldsEqual(f);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(this.filter);
+  }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/72b36e1d/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/TimestampsFilter.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/TimestampsFilter.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/TimestampsFilter.java
index b3a8eae..cc749a5 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/TimestampsFilter.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/TimestampsFilter.java
@@ -20,6 +20,7 @@ package org.apache.hadoop.hbase.filter;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 import java.util.TreeSet;
 
 import org.apache.hadoop.hbase.Cell;
@@ -238,4 +239,18 @@ public class TimestampsFilter extends FilterBase {
     return String.format("%s (%d/%d): [%s] canHint: [%b]", this.getClass().getSimpleName(),
         count, this.timestamps.size(), tsList.toString(), canHint);
   }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj == null || (!(obj instanceof TimestampsFilter))) {
+      return false;
+    }
+    TimestampsFilter f = (TimestampsFilter) obj;
+    return this.areSerializedFieldsEqual(f);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(this.getTimestamps().toArray());
+  }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/72b36e1d/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/ValueFilter.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/ValueFilter.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/ValueFilter.java
index 3faa111..59c2794 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/ValueFilter.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/ValueFilter.java
@@ -21,6 +21,7 @@ package org.apache.hadoop.hbase.filter;
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Objects;
 
 import org.apache.hadoop.hbase.Cell;
 import org.apache.hadoop.hbase.CompareOperator;
@@ -139,4 +140,18 @@ public class ValueFilter extends CompareFilter {
 
     return super.areSerializedFieldsEqual(o);
   }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj == null || (!(obj instanceof ValueFilter))) {
+      return false;
+    }
+    ValueFilter f = (ValueFilter) obj;
+    return this.areSerializedFieldsEqual(f);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(this.getComparator(), this.getCompareOperator());
+  }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/72b36e1d/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/WhileMatchFilter.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/WhileMatchFilter.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/WhileMatchFilter.java
index 6c1a47f..d501dc4 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/WhileMatchFilter.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/WhileMatchFilter.java
@@ -20,6 +20,7 @@
 package org.apache.hadoop.hbase.filter;
 
 import java.io.IOException;
+import java.util.Objects;
 
 import org.apache.hadoop.hbase.Cell;
 import org.apache.yetus.audience.InterfaceAudience;
@@ -163,4 +164,18 @@ public class WhileMatchFilter extends FilterBase {
   public String toString() {
     return this.getClass().getSimpleName() + " " + this.filter.toString();
   }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj == null || (!(obj.getClass() == this.getClass()))) {
+      return false;
+    }
+    WhileMatchFilter f = (WhileMatchFilter) obj;
+    return this.areSerializedFieldsEqual(f);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(this.filter);
+  }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/72b36e1d/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/AccessControlFilter.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/AccessControlFilter.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/AccessControlFilter.java
index 24f750a..e7cf424 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/AccessControlFilter.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/AccessControlFilter.java
@@ -20,6 +20,7 @@ package org.apache.hadoop.hbase.security.access;
 
 import java.io.IOException;
 import java.util.Map;
+import java.util.Objects;
 
 import org.apache.yetus.audience.InterfaceAudience;
 import org.apache.hadoop.hbase.Cell;
@@ -173,4 +174,26 @@ class AccessControlFilter extends FilterBase {
     throw new UnsupportedOperationException(
       "Serialization not supported.  Intended for server-side use only.");
   }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj == null || (!(obj.getClass() == this.getClass()))) {
+      return false;
+    }
+    if(this == obj){
+      return true;
+    }
+    AccessControlFilter f=(AccessControlFilter)obj;
+    return this.authManager.equals(f.authManager) &&
+        this.table.equals(f.table) &&
+        this.user.equals(f.user) &&
+        this.strategy.equals(f.strategy) &&
+        this.cfVsMaxVersions.equals(f.cfVsMaxVersions);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(this.authManager, this.table, this.strategy, this.user,
+        this.cfVsMaxVersions);
+  }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/72b36e1d/hbase-server/src/main/java/org/apache/hadoop/hbase/security/visibility/VisibilityController.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/visibility/VisibilityController.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/visibility/VisibilityController.java
index 4f00e7d..3f4b64a 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/visibility/VisibilityController.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/visibility/VisibilityController.java
@@ -1038,6 +1038,23 @@ public class VisibilityController implements MasterCoprocessor, RegionCoprocesso
               deleteCellVisTagsFormat);
       return matchFound ? ReturnCode.INCLUDE : ReturnCode.SKIP;
     }
+    @Override
+    public boolean equals(Object obj) {
+      if (obj == null || (!(obj.getClass() == this.getClass()))) {
+        return false;
+      }
+      if(this == obj){
+        return true;
+      }
+      DeleteVersionVisibilityExpressionFilter f = (DeleteVersionVisibilityExpressionFilter)obj;
+      return this.deleteCellVisTags.equals(f.deleteCellVisTags) &&
+          this.deleteCellVisTagsFormat.equals(f.deleteCellVisTagsFormat);
+    }
+
+    @Override
+    public int hashCode() {
+      return Objects.hash(this.deleteCellVisTags, this.deleteCellVisTagsFormat);
+    }
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/hbase/blob/72b36e1d/hbase-server/src/main/java/org/apache/hadoop/hbase/security/visibility/VisibilityLabelFilter.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/visibility/VisibilityLabelFilter.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/visibility/VisibilityLabelFilter.java
index 2bde9b5..590a2a4 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/visibility/VisibilityLabelFilter.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/visibility/VisibilityLabelFilter.java
@@ -19,6 +19,7 @@ package org.apache.hadoop.hbase.security.visibility;
 
 import java.io.IOException;
 import java.util.Map;
+import java.util.Objects;
 
 import org.apache.yetus.audience.InterfaceAudience;
 import org.apache.hadoop.hbase.Cell;
@@ -90,4 +91,21 @@ class VisibilityLabelFilter extends FilterBase {
     this.curFamilyMaxVersions = 0;
     this.curQualMetVersions = 0;
   }
+  @Override
+  public boolean equals(Object obj) {
+    if (obj == null || (!(obj.getClass() == this.getClass()))) {
+      return false;
+    }
+    if(this == obj){
+      return true;
+    }
+    VisibilityLabelFilter f = (VisibilityLabelFilter)obj;
+    return this.expEvaluator.equals(f.expEvaluator) &&
+        this.cfVsMaxVersions.equals(f.cfVsMaxVersions);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(this.expEvaluator, this.cfVsMaxVersions);
+  }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/72b36e1d/hbase-server/src/test/java/org/apache/hadoop/hbase/client/ColumnCountOnRowFilter.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/ColumnCountOnRowFilter.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/ColumnCountOnRowFilter.java
index 5bede2a..5735a98 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/ColumnCountOnRowFilter.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/ColumnCountOnRowFilter.java
@@ -18,6 +18,7 @@
 package org.apache.hadoop.hbase.client;
 
 import java.io.IOException;
+import java.util.Objects;
 
 import org.apache.hadoop.hbase.Cell;
 import org.apache.yetus.audience.InterfaceAudience;
@@ -55,4 +56,21 @@ public final class ColumnCountOnRowFilter extends FilterBase {
   public static ColumnCountOnRowFilter parseFrom(byte[] bytes) throws DeserializationException {
     return new ColumnCountOnRowFilter(Bytes.toInt(bytes));
   }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj == null || (!(obj.getClass() == this.getClass()))) {
+      return false;
+    }
+    if (this == obj) {
+      return true;
+    }
+    ColumnCountOnRowFilter f = (ColumnCountOnRowFilter) obj;
+    return this.limit == f.limit;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(this.limit);
+  }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/72b36e1d/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestFilter.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestFilter.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestFilter.java
index a3e3359..e6d73fb 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestFilter.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestFilter.java
@@ -25,6 +25,7 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+
 import org.apache.hadoop.hbase.Cell;
 import org.apache.hadoop.hbase.CellComparator;
 import org.apache.hadoop.hbase.CellUtil;

http://git-wip-us.apache.org/repos/asf/hbase/blob/72b36e1d/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestFilterList.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestFilterList.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestFilterList.java
index 5f9515a..4d14cd4 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestFilterList.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestFilterList.java
@@ -27,6 +27,8 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Objects;
+
 import org.apache.hadoop.hbase.Cell;
 import org.apache.hadoop.hbase.CellComparator;
 import org.apache.hadoop.hbase.CompareOperator;
@@ -647,6 +649,23 @@ public class TestFilterList {
       this.didCellPassToTheFilter = true;
       return targetRetCode;
     }
+
+    @Override
+    public boolean equals(Object obj) {
+      if(obj == null || !(obj instanceof  MockFilter)){
+        return false;
+      }
+      if(obj == this){
+        return true;
+      }
+      MockFilter f = (MockFilter)obj;
+      return this.targetRetCode.equals(f.targetRetCode);
+    }
+
+    @Override
+    public int hashCode() {
+      return Objects.hash(this.targetRetCode);
+    }
   }
 
   @Test
@@ -819,6 +838,23 @@ public class TestFilterList {
     public Cell getNextCellHint(Cell currentCell) throws IOException {
       return this.returnCell;
     }
+
+    @Override
+    public boolean equals(Object obj) {
+      if(obj == null || !(obj instanceof  MockSeekHintFilter)){
+        return false;
+      }
+      if(obj == this){
+        return true;
+      }
+      MockSeekHintFilter f = (MockSeekHintFilter)obj;
+      return this.returnCell.equals(f.returnCell);
+    }
+
+    @Override
+    public int hashCode() {
+      return Objects.hash(this.returnCell);
+    }
   }
 
   @Test
@@ -988,6 +1024,23 @@ public class TestFilterList {
     public boolean getTransformed() {
       return this.transformed;
     }
+
+    @Override
+    public boolean equals(Object obj) {
+      if(obj == null || !(obj instanceof  TransformFilter)){
+        return false;
+      }
+      if(obj == this){
+        return true;
+      }
+      TransformFilter f = (TransformFilter)obj;
+      return this.targetRetCode.equals(f.targetRetCode);
+    }
+
+    @Override
+    public int hashCode() {
+      return Objects.hash(this.targetRetCode);
+    }
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/hbase/blob/72b36e1d/hbase-spark/src/main/java/org/apache/hadoop/hbase/spark/SparkSQLPushDownFilter.java
----------------------------------------------------------------------
diff --git a/hbase-spark/src/main/java/org/apache/hadoop/hbase/spark/SparkSQLPushDownFilter.java b/hbase-spark/src/main/java/org/apache/hadoop/hbase/spark/SparkSQLPushDownFilter.java
index 694fb6a..bcfecac 100644
--- a/hbase-spark/src/main/java/org/apache/hadoop/hbase/spark/SparkSQLPushDownFilter.java
+++ b/hbase-spark/src/main/java/org/apache/hadoop/hbase/spark/SparkSQLPushDownFilter.java
@@ -21,9 +21,11 @@ import com.google.protobuf.ByteString;
 import com.google.protobuf.InvalidProtocolBufferException;
 
 import java.io.IOException;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
 import org.apache.hadoop.hbase.Cell;
 import org.apache.hadoop.hbase.exceptions.DeserializationException;
@@ -274,4 +276,34 @@ public class SparkSQLPushDownFilter extends FilterBase{
 
     return builder.build().toByteArray();
   }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj == null || (!(obj instanceof SparkSQLPushDownFilter))) {
+      return false;
+    }
+    if (this == obj) {
+      return true;
+    }
+    SparkSQLPushDownFilter f = (SparkSQLPushDownFilter) obj;
+    if (this.valueFromQueryArray.length != f.valueFromQueryArray.length) {
+      return false;
+    }
+    int i = 0;
+    for (byte[] val : this.valueFromQueryArray) {
+      if (!Bytes.equals(val, f.valueFromQueryArray[i])) {
+        return false;
+      }
+      i++;
+    }
+    return this.dynamicLogicExpression.equals(f.dynamicLogicExpression) &&
+        this.currentCellToColumnIndexMap.equals(f.currentCellToColumnIndexMap) &&
+        this.encoderClassName.equals(f.encoderClassName);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(this.dynamicLogicExpression, Arrays.hashCode(this.valueFromQueryArray),
+      this.currentCellToColumnIndexMap, this.encoderClassName);
+  }
 }