This is an automated email from the ASF dual-hosted git repository.

stoty pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/phoenix.git


The following commit(s) were added to refs/heads/master by this push:
     new e2e2e4ea3f PHOENIX-7476 HBase 3 compatibility changes for Filters, 
ByteStringer, and Paging (#2122)
e2e2e4ea3f is described below

commit e2e2e4ea3fde248b686f2647278e7991de56ef8e
Author: Istvan Toth <[email protected]>
AuthorDate: Tue Jul 8 07:45:51 2025 +0200

    PHOENIX-7476 HBase 3 compatibility changes for Filters, ByteStringer, and 
Paging (#2122)
    
    Co-authored-by: Villő Szűcs <[email protected]>
---
 .../apache/phoenix/cache/ServerCacheClient.java    |  2 +-
 .../coprocessorclient/MetaDataProtocol.java        |  2 +-
 .../filter/AllVersionsIndexRebuildFilter.java      |  2 +-
 .../phoenix/filter/ColumnProjectionFilter.java     |  2 +-
 .../org/apache/phoenix/filter/DelegateFilter.java  | 11 ----
 .../phoenix/filter/DistinctPrefixFilter.java       |  2 +-
 .../phoenix/filter/EmptyColumnOnlyFilter.java      |  4 +-
 .../EncodedQualifiersColumnProjectionFilter.java   |  2 +-
 .../MultiEncodedCQKeyValueComparisonFilter.java    |  2 +-
 .../filter/MultiKeyValueComparisonFilter.java      |  2 +-
 .../org/apache/phoenix/filter/PagingFilter.java    | 16 ++---
 .../phoenix/filter/RowKeyComparisonFilter.java     |  2 +-
 .../filter/SingleKeyValueComparisonFilter.java     |  2 +-
 .../org/apache/phoenix/filter/SkipScanFilter.java  |  2 +-
 .../filter/SystemCatalogViewIndexIdFilter.java     |  2 +-
 .../apache/phoenix/filter/UnverifiedRowFilter.java |  2 +-
 .../filter/ApplyAndFilterDeletesFilter.java        |  2 +-
 .../ColumnTrackingNextLargestTimestampFilter.java  |  2 +-
 .../index/covered/filter/MaxTimestampFilter.java   |  2 +-
 .../index/covered/filter/NewerTimestampFilter.java |  2 +-
 .../org/apache/phoenix/index/CDCTableInfo.java     |  2 +-
 .../org/apache/phoenix/index/IndexMaintainer.java  |  2 +-
 .../java/org/apache/phoenix/parse/PFunction.java   |  2 +-
 .../org/apache/phoenix/protobuf/ProtobufUtil.java  |  2 +-
 .../phoenix/query/ConnectionQueryServicesImpl.java |  2 +-
 .../org/apache/phoenix/schema/PColumnImpl.java     |  2 +-
 .../java/org/apache/phoenix/schema/PTableImpl.java |  2 +-
 .../schema/transform/TransformMaintainer.java      |  2 +-
 .../phoenix/util/ValidateLastDDLTimestampUtil.java |  2 +-
 .../apache/phoenix/coprocessor/SuffixFilter.java   | 72 ----------------------
 .../end2end/PhoenixRegionServerEndpointIT.java     |  2 +-
 .../index/InvalidIndexStateClientSideIT.java       |  2 +-
 .../apache/phoenix/filter/SkipScanFilterTest.java  |  4 +-
 .../apache/phoenix/compat/hbase/ByteStringer.java  | 36 +++--------
 .../phoenix/compat/hbase/CompatDelegateFilter.java | 35 ++++-------
 .../phoenix/compat/hbase/CompatPagingFilter.java   | 27 +++-----
 .../apache/phoenix/compat/hbase/package-info.java  | 30 +--------
 .../apache/phoenix/compat/hbase/ByteStringer.java  | 36 +++--------
 .../phoenix/compat/hbase/CompatDelegateFilter.java | 35 ++++-------
 .../phoenix/compat/hbase/CompatPagingFilter.java   | 27 +++-----
 .../apache/phoenix/compat/hbase/package-info.java  | 30 +--------
 .../apache/phoenix/compat/hbase/ByteStringer.java  | 36 +++--------
 .../phoenix/compat/hbase/CompatDelegateFilter.java | 26 +++-----
 .../phoenix/compat/hbase/CompatPagingFilter.java   | 27 +++-----
 .../apache/phoenix/compat/hbase/package-info.java  | 30 +--------
 .../apache/phoenix/compat/hbase/ByteStringer.java  | 36 +++--------
 .../phoenix/compat/hbase/CompatDelegateFilter.java | 35 ++++-------
 .../phoenix/compat/hbase/CompatPagingFilter.java   | 27 +++-----
 .../apache/phoenix/compat/hbase/package-info.java  | 30 +--------
 49 files changed, 172 insertions(+), 494 deletions(-)

diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/cache/ServerCacheClient.java
 
b/phoenix-core-client/src/main/java/org/apache/phoenix/cache/ServerCacheClient.java
index 9c6bb11695..f538e2ea4d 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/cache/ServerCacheClient.java
+++ 
b/phoenix-core-client/src/main/java/org/apache/phoenix/cache/ServerCacheClient.java
@@ -47,8 +47,8 @@ import org.apache.hadoop.hbase.client.coprocessor.Batch;
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 import org.apache.hadoop.hbase.ipc.CoprocessorRpcUtils.BlockingRpcCallback;
 import org.apache.hadoop.hbase.ipc.ServerRpcController;
-import org.apache.hadoop.hbase.util.ByteStringer;
 import org.apache.hadoop.hbase.util.Bytes;
+import org.apache.phoenix.compat.hbase.ByteStringer;
 import org.apache.phoenix.compile.QueryPlan;
 import org.apache.phoenix.compile.ScanRanges;
 import org.apache.phoenix.coprocessorclient.MetaDataProtocol;
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/coprocessorclient/MetaDataProtocol.java
 
b/phoenix-core-client/src/main/java/org/apache/phoenix/coprocessorclient/MetaDataProtocol.java
index ff0f4d15df..7d9085902b 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/coprocessorclient/MetaDataProtocol.java
+++ 
b/phoenix-core-client/src/main/java/org/apache/phoenix/coprocessorclient/MetaDataProtocol.java
@@ -24,7 +24,7 @@ import java.util.List;
 import java.util.NavigableMap;
 import java.util.TreeMap;
 
-import org.apache.hadoop.hbase.util.ByteStringer;
+import org.apache.phoenix.compat.hbase.ByteStringer;
 import org.apache.phoenix.coprocessor.generated.MetaDataProtos;
 import 
org.apache.phoenix.coprocessor.generated.MetaDataProtos.MetaDataResponse;
 import org.apache.phoenix.coprocessor.generated.MetaDataProtos.MetaDataService;
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/filter/AllVersionsIndexRebuildFilter.java
 
b/phoenix-core-client/src/main/java/org/apache/phoenix/filter/AllVersionsIndexRebuildFilter.java
index f52c933679..a4663b60b7 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/filter/AllVersionsIndexRebuildFilter.java
+++ 
b/phoenix-core-client/src/main/java/org/apache/phoenix/filter/AllVersionsIndexRebuildFilter.java
@@ -33,7 +33,7 @@ public class AllVersionsIndexRebuildFilter extends 
DelegateFilter {
         super(originalFilter);
     }
 
-    @Override
+    // No @Override for HBase 3 compatibility
     public ReturnCode filterKeyValue(Cell v) throws IOException {
         return filterCell(v);
     }
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/filter/ColumnProjectionFilter.java
 
b/phoenix-core-client/src/main/java/org/apache/phoenix/filter/ColumnProjectionFilter.java
index b58b9b8a9c..60c3971c28 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/filter/ColumnProjectionFilter.java
+++ 
b/phoenix-core-client/src/main/java/org/apache/phoenix/filter/ColumnProjectionFilter.java
@@ -185,7 +185,7 @@ public class ColumnProjectionFilter extends FilterBase 
implements Writable {
         return "";
     }
 
-    @Override
+    // No @Override for HBase 3 compatibility
     public ReturnCode filterKeyValue(Cell ignored) throws IOException {
         return filterCell(ignored);
     }
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/filter/DelegateFilter.java
 
b/phoenix-core-client/src/main/java/org/apache/phoenix/filter/DelegateFilter.java
index 1f73241972..fff129297d 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/filter/DelegateFilter.java
+++ 
b/phoenix-core-client/src/main/java/org/apache/phoenix/filter/DelegateFilter.java
@@ -21,7 +21,6 @@ import java.io.IOException;
 import java.util.List;
 
 import org.apache.hadoop.hbase.Cell;
-import org.apache.hadoop.hbase.KeyValue;
 import org.apache.hadoop.hbase.filter.Filter;
 import org.apache.hadoop.hbase.filter.FilterBase;
 
@@ -38,11 +37,6 @@ public class DelegateFilter extends FilterBase {
         delegate.reset();
     }
 
-    @Override
-    public boolean filterRowKey(byte[] buffer, int offset, int length) throws 
IOException {
-        return delegate.filterRowKey(buffer, offset, length);
-    }
-
     @Override
     public boolean filterRowKey(Cell cell) throws IOException {
         return delegate.filterRowKey(cell);
@@ -58,11 +52,6 @@ public class DelegateFilter extends FilterBase {
         return delegate.filterAllRemaining();
     }
 
-    @Override
-    public ReturnCode filterKeyValue(Cell v) throws IOException {
-        return delegate.filterKeyValue(v);
-    }
-
     @Override
     public Cell transformCell(Cell v) throws IOException {
         return delegate.transformCell(v);
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/filter/DistinctPrefixFilter.java
 
b/phoenix-core-client/src/main/java/org/apache/phoenix/filter/DistinctPrefixFilter.java
index e3e78d4c23..04626c7394 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/filter/DistinctPrefixFilter.java
+++ 
b/phoenix-core-client/src/main/java/org/apache/phoenix/filter/DistinctPrefixFilter.java
@@ -57,7 +57,7 @@ public class DistinctPrefixFilter extends FilterBase 
implements Writable {
         this.offset = offset;
     }
 
-    @Override
+    // No @Override for HBase 3 compatibility
     public ReturnCode filterKeyValue(Cell v) throws IOException {
         return filterCell(v);
     }
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/filter/EmptyColumnOnlyFilter.java
 
b/phoenix-core-client/src/main/java/org/apache/phoenix/filter/EmptyColumnOnlyFilter.java
index b31ed26356..058a7251be 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/filter/EmptyColumnOnlyFilter.java
+++ 
b/phoenix-core-client/src/main/java/org/apache/phoenix/filter/EmptyColumnOnlyFilter.java
@@ -56,8 +56,8 @@ public class EmptyColumnOnlyFilter extends FilterBase 
implements Writable {
         found = false;
         first = true;
     }
-    @Deprecated
-    @Override
+
+    // No @Override for HBase 3 compatibility
     public ReturnCode filterKeyValue(final Cell c) throws IOException {
         return filterCell(c);
     }
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/filter/EncodedQualifiersColumnProjectionFilter.java
 
b/phoenix-core-client/src/main/java/org/apache/phoenix/filter/EncodedQualifiersColumnProjectionFilter.java
index ef1d161dea..8c35207599 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/filter/EncodedQualifiersColumnProjectionFilter.java
+++ 
b/phoenix-core-client/src/main/java/org/apache/phoenix/filter/EncodedQualifiersColumnProjectionFilter.java
@@ -148,7 +148,7 @@ public class EncodedQualifiersColumnProjectionFilter 
extends FilterBase implemen
         return sb.toString();
     }
 
-    @Override
+    // No @Override for HBase 3 compatibility
     public ReturnCode filterKeyValue(Cell ignored) throws IOException {
         return filterCell(ignored);
     }
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/filter/MultiEncodedCQKeyValueComparisonFilter.java
 
b/phoenix-core-client/src/main/java/org/apache/phoenix/filter/MultiEncodedCQKeyValueComparisonFilter.java
index 9118094b01..0d34891f7f 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/filter/MultiEncodedCQKeyValueComparisonFilter.java
+++ 
b/phoenix-core-client/src/main/java/org/apache/phoenix/filter/MultiEncodedCQKeyValueComparisonFilter.java
@@ -215,7 +215,7 @@ public class MultiEncodedCQKeyValueComparisonFilter extends 
BooleanExpressionFil
         return qualifier >= whereExpressionMinQualifier ? 
whereExpressionQualifiers.get(qualifier - whereExpressionMinQualifier) : false;
     }
 
-    @Override
+    // No @Override for HBase 3 compatibility
     public ReturnCode filterKeyValue(Cell cell) {
         return filterCell(cell);
     }
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/filter/MultiKeyValueComparisonFilter.java
 
b/phoenix-core-client/src/main/java/org/apache/phoenix/filter/MultiKeyValueComparisonFilter.java
index 87a56d4a8e..dc929df4b9 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/filter/MultiKeyValueComparisonFilter.java
+++ 
b/phoenix-core-client/src/main/java/org/apache/phoenix/filter/MultiKeyValueComparisonFilter.java
@@ -214,7 +214,7 @@ public abstract class MultiKeyValueComparisonFilter extends 
BooleanExpressionFil
         expression.accept(visitor);
     }
 
-    @Override
+    // No @Override for Hbase 3 compatibility
     public ReturnCode filterKeyValue(Cell cell) {
         return filterCell(cell);
     }
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/filter/PagingFilter.java 
b/phoenix-core-client/src/main/java/org/apache/phoenix/filter/PagingFilter.java
index eb9eb3b426..38d892c947 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/filter/PagingFilter.java
+++ 
b/phoenix-core-client/src/main/java/org/apache/phoenix/filter/PagingFilter.java
@@ -29,9 +29,9 @@ import org.apache.hadoop.hbase.CellUtil;
 import org.apache.hadoop.hbase.DoNotRetryIOException;
 import org.apache.hadoop.hbase.exceptions.DeserializationException;
 import org.apache.hadoop.hbase.filter.Filter;
-import org.apache.hadoop.hbase.filter.FilterBase;
 import org.apache.hadoop.hbase.util.Writables;
 import org.apache.hadoop.io.Writable;
+import org.apache.phoenix.compat.hbase.CompatPagingFilter;
 import org.apache.phoenix.util.EnvironmentEdgeManager;
 
 /**
@@ -71,19 +71,19 @@ import org.apache.phoenix.util.EnvironmentEdgeManager;
  * filterRowKey(). In this method, PagingFilter records the last row that is 
scanned.
  *
  */
-public class PagingFilter extends FilterBase implements Writable {
+public class PagingFilter extends CompatPagingFilter implements Writable {
     private long pageSizeMs;
     private long startTime;
     // tracks the row we last visited
     private Cell currentCell;
     private boolean isStopped;
-    private Filter delegate = null;
 
     public PagingFilter() {
+        super(null);
     }
 
     public PagingFilter(Filter delegate, long pageSizeMs) {
-        this.delegate = delegate;
+        super(delegate);
         this.pageSizeMs = pageSizeMs;
     }
 
@@ -208,14 +208,6 @@ public class PagingFilter extends FilterBase implements 
Writable {
         return super.isFamilyEssential(name);
     }
 
-    @Override
-    public ReturnCode filterKeyValue(Cell v) throws IOException {
-        if (delegate != null) {
-            return delegate.filterKeyValue(v);
-        }
-        return super.filterKeyValue(v);
-    }
-
     @Override
     public Filter.ReturnCode filterCell(Cell c) throws IOException {
         if (delegate != null) {
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/filter/RowKeyComparisonFilter.java
 
b/phoenix-core-client/src/main/java/org/apache/phoenix/filter/RowKeyComparisonFilter.java
index ebe50e78dc..da9d89a01d 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/filter/RowKeyComparisonFilter.java
+++ 
b/phoenix-core-client/src/main/java/org/apache/phoenix/filter/RowKeyComparisonFilter.java
@@ -65,7 +65,7 @@ public class RowKeyComparisonFilter extends 
BooleanExpressionFilter {
      * Evaluate in filterKeyValue instead of filterRowKey, because HBASE-6562 
causes filterRowKey
      * to be called with deleted or partial row keys.
      */
-    @Override
+    // No @Override for HBase 3 compatibility
     public ReturnCode filterKeyValue(Cell v) {
         return filterCell(v);
     }
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/filter/SingleKeyValueComparisonFilter.java
 
b/phoenix-core-client/src/main/java/org/apache/phoenix/filter/SingleKeyValueComparisonFilter.java
index a55ed3784d..5dd3257ff4 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/filter/SingleKeyValueComparisonFilter.java
+++ 
b/phoenix-core-client/src/main/java/org/apache/phoenix/filter/SingleKeyValueComparisonFilter.java
@@ -71,7 +71,7 @@ public abstract class SingleKeyValueComparisonFilter extends 
BooleanExpressionFi
         return inputTuple.size() > 0;
     }
 
-    @Override
+    // No @Override for HBase 3 compatibility
     public ReturnCode filterKeyValue(Cell keyValue) {
         return filterCell(keyValue);
     }
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/filter/SkipScanFilter.java
 
b/phoenix-core-client/src/main/java/org/apache/phoenix/filter/SkipScanFilter.java
index b0d75c20eb..344525869a 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/filter/SkipScanFilter.java
+++ 
b/phoenix-core-client/src/main/java/org/apache/phoenix/filter/SkipScanFilter.java
@@ -166,7 +166,7 @@ public class SkipScanFilter extends FilterBase implements 
Writable {
         return isDone;
     }
 
-    @Override
+    // No @Override for HBase 3 compatibility
     public ReturnCode filterKeyValue(Cell kv) {
         return filterCell(kv);
     }
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/filter/SystemCatalogViewIndexIdFilter.java
 
b/phoenix-core-client/src/main/java/org/apache/phoenix/filter/SystemCatalogViewIndexIdFilter.java
index 6aa8c559a0..3408ea8bba 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/filter/SystemCatalogViewIndexIdFilter.java
+++ 
b/phoenix-core-client/src/main/java/org/apache/phoenix/filter/SystemCatalogViewIndexIdFilter.java
@@ -54,7 +54,7 @@ public class SystemCatalogViewIndexIdFilter extends 
FilterBase implements Writab
         this.clientVersion = clientVersion;
     }
 
-    @Override
+    // No @Override for HBase 3 compatibility
     public ReturnCode filterKeyValue(Cell keyValue) {
         return filterCell(keyValue);
     }
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/filter/UnverifiedRowFilter.java
 
b/phoenix-core-client/src/main/java/org/apache/phoenix/filter/UnverifiedRowFilter.java
index 400b48d477..fa8b40232e 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/filter/UnverifiedRowFilter.java
+++ 
b/phoenix-core-client/src/main/java/org/apache/phoenix/filter/UnverifiedRowFilter.java
@@ -68,7 +68,7 @@ public class UnverifiedRowFilter extends DelegateFilter {
         delegate.reset();
     }
 
-    @Override
+    // No @Override for HBase 3 compatibility
     public ReturnCode filterKeyValue(Cell v) throws IOException {
         return filterCell(v);
     }
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/ApplyAndFilterDeletesFilter.java
 
b/phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/ApplyAndFilterDeletesFilter.java
index 51d82fd83c..07df2f06d5 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/ApplyAndFilterDeletesFilter.java
+++ 
b/phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/ApplyAndFilterDeletesFilter.java
@@ -102,7 +102,7 @@ public class ApplyAndFilterDeletesFilter extends FilterBase 
{
     return currentHint.getHint(PhoenixKeyValueUtil.maybeCopyCell(peeked));
   }
 
-  @Override
+  // No @Override for HBase 3 compatibility
   public ReturnCode filterKeyValue(Cell next) {
     return this.filterCell(next);
   }
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/ColumnTrackingNextLargestTimestampFilter.java
 
b/phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/ColumnTrackingNextLargestTimestampFilter.java
index 21250af186..e59ebdfbdf 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/ColumnTrackingNextLargestTimestampFilter.java
+++ 
b/phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/ColumnTrackingNextLargestTimestampFilter.java
@@ -47,7 +47,7 @@ public class ColumnTrackingNextLargestTimestampFilter extends 
FilterBase {
     this.column = toTrack;
   }
 
-  @Override
+  // No @Override for HBase 3 compatibility
   public ReturnCode filterKeyValue(Cell v) {
     return this.filterCell(v);
   }
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/MaxTimestampFilter.java
 
b/phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/MaxTimestampFilter.java
index b9640d7e66..df56c35fa3 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/MaxTimestampFilter.java
+++ 
b/phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/MaxTimestampFilter.java
@@ -51,7 +51,7 @@ public class MaxTimestampFilter extends FilterBase {
     return kv;
   }
 
-  @Override
+  // No @Override for HBase 3 compatibility
   public ReturnCode filterKeyValue(Cell v) {
     return this.filterCell(v);
   }
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/NewerTimestampFilter.java
 
b/phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/NewerTimestampFilter.java
index 85d16d9015..cb3dc10c58 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/NewerTimestampFilter.java
+++ 
b/phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/NewerTimestampFilter.java
@@ -34,7 +34,7 @@ public class NewerTimestampFilter extends FilterBase {
     this.timestamp = timestamp;
   }
 
-  @Override
+  // No @Override for HBase 3 compatibility
   public ReturnCode filterKeyValue(Cell ignored) {
     return this.filterCell(ignored);
   }
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/index/CDCTableInfo.java 
b/phoenix-core-client/src/main/java/org/apache/phoenix/index/CDCTableInfo.java
index 02fe008ab3..192b981805 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/index/CDCTableInfo.java
+++ 
b/phoenix-core-client/src/main/java/org/apache/phoenix/index/CDCTableInfo.java
@@ -18,7 +18,7 @@
 
 package org.apache.phoenix.index;
 
-import org.apache.hadoop.hbase.util.ByteStringer;
+import org.apache.phoenix.compat.hbase.ByteStringer;
 import org.apache.phoenix.compile.StatementContext;
 import org.apache.phoenix.compile.TupleProjectionCompiler;
 import org.apache.phoenix.coprocessor.generated.CDCInfoProtos;
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/index/IndexMaintainer.java
 
b/phoenix-core-client/src/main/java/org/apache/phoenix/index/IndexMaintainer.java
index 9b920af2a8..05fc20bec6 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/index/IndexMaintainer.java
+++ 
b/phoenix-core-client/src/main/java/org/apache/phoenix/index/IndexMaintainer.java
@@ -51,11 +51,11 @@ import org.apache.hadoop.hbase.client.Durability;
 import org.apache.hadoop.hbase.client.Mutation;
 import org.apache.hadoop.hbase.client.Put;
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
-import org.apache.hadoop.hbase.util.ByteStringer;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.hadoop.hbase.util.Pair;
 import org.apache.hadoop.io.Writable;
 import org.apache.hadoop.io.WritableUtils;
+import org.apache.phoenix.compat.hbase.ByteStringer;
 import org.apache.phoenix.compile.ColumnResolver;
 import org.apache.phoenix.compile.FromCompiler;
 import org.apache.phoenix.compile.IndexExpressionCompiler;
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/parse/PFunction.java 
b/phoenix-core-client/src/main/java/org/apache/phoenix/parse/PFunction.java
index f914fbae86..4489cff7c0 100644
--- a/phoenix-core-client/src/main/java/org/apache/phoenix/parse/PFunction.java
+++ b/phoenix-core-client/src/main/java/org/apache/phoenix/parse/PFunction.java
@@ -22,7 +22,7 @@ import java.util.Collections;
 import java.util.List;
 
 import org.apache.hadoop.hbase.HConstants;
-import org.apache.hadoop.hbase.util.ByteStringer;
+import org.apache.phoenix.compat.hbase.ByteStringer;
 import org.apache.phoenix.coprocessor.generated.PFunctionProtos;
 import org.apache.phoenix.coprocessor.generated.PFunctionProtos.PFunctionArg;
 import org.apache.phoenix.expression.LiteralExpression;
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/protobuf/ProtobufUtil.java
 
b/phoenix-core-client/src/main/java/org/apache/phoenix/protobuf/ProtobufUtil.java
index 66528dc5c9..18a30368cb 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/protobuf/ProtobufUtil.java
+++ 
b/phoenix-core-client/src/main/java/org/apache/phoenix/protobuf/ProtobufUtil.java
@@ -28,8 +28,8 @@ import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 import org.apache.hadoop.hbase.ipc.ServerRpcController;
 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto;
 import 
org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.MutationType;
-import org.apache.hadoop.hbase.util.ByteStringer;
 import org.apache.hadoop.util.StringUtils;
+import org.apache.phoenix.compat.hbase.ByteStringer;
 import 
org.apache.phoenix.coprocessor.generated.ChildLinkMetaDataProtos.CreateViewAddChildLinkRequest;
 import org.apache.phoenix.coprocessor.generated.MetaDataProtos;
 import org.apache.phoenix.coprocessor.generated.PTableProtos;
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/query/ConnectionQueryServicesImpl.java
 
b/phoenix-core-client/src/main/java/org/apache/phoenix/query/ConnectionQueryServicesImpl.java
index b2c7f3b4e3..11d672c3b2 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/query/ConnectionQueryServicesImpl.java
+++ 
b/phoenix-core-client/src/main/java/org/apache/phoenix/query/ConnectionQueryServicesImpl.java
@@ -192,13 +192,13 @@ import 
org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto;
 import org.apache.hadoop.hbase.security.AccessDeniedException;
 import org.apache.hadoop.hbase.security.User;
 import org.apache.hadoop.hbase.snapshot.SnapshotCreationException;
-import org.apache.hadoop.hbase.util.ByteStringer;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.hadoop.hbase.util.Pair;
 import org.apache.hadoop.hbase.util.Threads;
 import org.apache.hadoop.hbase.util.VersionInfo;
 import org.apache.hadoop.hbase.zookeeper.ZKConfig;
 import org.apache.hadoop.ipc.RemoteException;
+import org.apache.phoenix.compat.hbase.ByteStringer;
 import org.apache.phoenix.compile.MutationPlan;
 import 
org.apache.phoenix.coprocessor.generated.ChildLinkMetaDataProtos.ChildLinkMetaDataService;
 import org.apache.phoenix.coprocessor.generated.MetaDataProtos;
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/schema/PColumnImpl.java 
b/phoenix-core-client/src/main/java/org/apache/phoenix/schema/PColumnImpl.java
index e3123a7502..32c4c1820f 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/schema/PColumnImpl.java
+++ 
b/phoenix-core-client/src/main/java/org/apache/phoenix/schema/PColumnImpl.java
@@ -18,7 +18,7 @@
 package org.apache.phoenix.schema;
 
 import org.apache.hadoop.hbase.HConstants;
-import org.apache.hadoop.hbase.util.ByteStringer;
+import org.apache.phoenix.compat.hbase.ByteStringer;
 import org.apache.phoenix.coprocessor.generated.PTableProtos;
 import org.apache.phoenix.query.QueryConstants;
 import org.apache.phoenix.schema.types.PDataType;
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/schema/PTableImpl.java 
b/phoenix-core-client/src/main/java/org/apache/phoenix/schema/PTableImpl.java
index 4d8f592be1..6d13c7c1a2 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/schema/PTableImpl.java
+++ 
b/phoenix-core-client/src/main/java/org/apache/phoenix/schema/PTableImpl.java
@@ -58,9 +58,9 @@ import org.apache.hadoop.hbase.client.Durability;
 import org.apache.hadoop.hbase.client.Mutation;
 import org.apache.hadoop.hbase.client.Put;
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
-import org.apache.hadoop.hbase.util.ByteStringer;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.hadoop.hbase.util.Pair;
+import org.apache.phoenix.compat.hbase.ByteStringer;
 import org.apache.phoenix.compile.ExpressionCompiler;
 import org.apache.phoenix.compile.FromCompiler;
 import org.apache.phoenix.compile.QueryPlan;
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/schema/transform/TransformMaintainer.java
 
b/phoenix-core-client/src/main/java/org/apache/phoenix/schema/transform/TransformMaintainer.java
index 50c9948faa..ffd82ac6b4 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/schema/transform/TransformMaintainer.java
+++ 
b/phoenix-core-client/src/main/java/org/apache/phoenix/schema/transform/TransformMaintainer.java
@@ -24,9 +24,9 @@ import 
org.apache.phoenix.thirdparty.com.google.common.collect.Sets;
 import org.apache.hadoop.hbase.client.Delete;
 import org.apache.hadoop.hbase.client.Put;
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
-import org.apache.hadoop.hbase.util.ByteStringer;
 import org.apache.hadoop.hbase.util.Pair;
 import org.apache.hadoop.io.WritableUtils;
+import org.apache.phoenix.compat.hbase.ByteStringer;
 import org.apache.phoenix.coprocessor.generated.ServerCachingProtos;
 import org.apache.phoenix.expression.Expression;
 import org.apache.phoenix.expression.ExpressionType;
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/util/ValidateLastDDLTimestampUtil.java
 
b/phoenix-core-client/src/main/java/org/apache/phoenix/util/ValidateLastDDLTimestampUtil.java
index faab529c03..1d654f0ca5 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/util/ValidateLastDDLTimestampUtil.java
+++ 
b/phoenix-core-client/src/main/java/org/apache/phoenix/util/ValidateLastDDLTimestampUtil.java
@@ -28,7 +28,7 @@ import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.HConstants;
 import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.client.Admin;
-import org.apache.hadoop.hbase.util.ByteStringer;
+import org.apache.phoenix.compat.hbase.ByteStringer;
 import org.apache.phoenix.coprocessor.generated.RegionServerEndpointProtos;
 import org.apache.phoenix.exception.StaleMetadataCacheException;
 import org.apache.phoenix.jdbc.PhoenixConnection;
diff --git 
a/phoenix-core-server/src/main/java/org/apache/phoenix/coprocessor/SuffixFilter.java
 
b/phoenix-core-server/src/main/java/org/apache/phoenix/coprocessor/SuffixFilter.java
deleted file mode 100644
index 57dffbc9f7..0000000000
--- 
a/phoenix-core-server/src/main/java/org/apache/phoenix/coprocessor/SuffixFilter.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.phoenix.coprocessor;
-
-import java.io.IOException;
-
-import org.apache.hadoop.hbase.Cell;
-import org.apache.hadoop.hbase.exceptions.DeserializationException;
-import org.apache.hadoop.hbase.filter.FilterBase;
-import org.apache.hadoop.hbase.util.Bytes;
-
-/**
- * 
- * Matches rows that end with a given byte array suffix
- *
- * 
- * @since 3.0
- */
-public class SuffixFilter extends FilterBase {
-    protected byte[] suffix = null;
-
-    public SuffixFilter(final byte[] suffix) {
-        this.suffix = suffix;
-    }
-    
-    @Override
-    public byte[] toByteArray() throws IOException {
-        return suffix;
-    }
-
-    @Override
-    public ReturnCode filterCell(Cell ignored) throws IOException {
-      return ReturnCode.INCLUDE;
-    }
-
-    @Override
-    public ReturnCode filterKeyValue(Cell ignored) throws IOException {
-        return ReturnCode.INCLUDE;
-    }
-
-    @Override
-    public boolean filterRowKey(byte[] buffer, int offset, int length) {
-        if (buffer == null || this.suffix == null) return true;
-        if (length < suffix.length) return true;
-        // if they are equal, return false => pass row
-        // else return true, filter row
-        // if we are passed the suffix, set flag
-        int cmp = Bytes.compareTo(buffer, offset + (length - 
this.suffix.length),
-                this.suffix.length, this.suffix, 0, this.suffix.length);
-        return cmp != 0;
-    }
-
-    
-    public static SuffixFilter parseFrom(final byte [] pbBytes) throws 
DeserializationException {
-        return new SuffixFilter(pbBytes);
-    }
-}
\ No newline at end of file
diff --git 
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/PhoenixRegionServerEndpointIT.java
 
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/PhoenixRegionServerEndpointIT.java
index 670aba7f15..e1c89593d7 100644
--- 
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/PhoenixRegionServerEndpointIT.java
+++ 
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/PhoenixRegionServerEndpointIT.java
@@ -20,7 +20,7 @@ package org.apache.phoenix.end2end;
 import org.apache.hadoop.hbase.HConstants;
 import org.apache.hadoop.hbase.ipc.ServerRpcController;
 import org.apache.hadoop.hbase.regionserver.HRegionServer;
-import org.apache.hadoop.hbase.util.ByteStringer;
+import org.apache.phoenix.compat.hbase.ByteStringer;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.phoenix.coprocessor.PhoenixRegionServerEndpoint;
 import org.apache.phoenix.coprocessor.generated.RegionServerEndpointProtos;
diff --git 
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/InvalidIndexStateClientSideIT.java
 
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/InvalidIndexStateClientSideIT.java
index 1228afbfcb..1111c563f7 100644
--- 
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/InvalidIndexStateClientSideIT.java
+++ 
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/InvalidIndexStateClientSideIT.java
@@ -31,7 +31,7 @@ import org.apache.hadoop.hbase.client.Table;
 import org.apache.hadoop.hbase.client.coprocessor.Batch;
 import org.apache.hadoop.hbase.ipc.CoprocessorRpcUtils.BlockingRpcCallback;
 import org.apache.hadoop.hbase.ipc.ServerRpcController;
-import org.apache.hadoop.hbase.util.ByteStringer;
+import org.apache.phoenix.compat.hbase.ByteStringer;
 import org.apache.phoenix.coprocessor.generated.MetaDataProtos.GetTableRequest;
 import 
org.apache.phoenix.coprocessor.generated.MetaDataProtos.MetaDataResponse;
 import org.apache.phoenix.coprocessor.generated.MetaDataProtos.MetaDataService;
diff --git 
a/phoenix-core/src/test/java/org/apache/phoenix/filter/SkipScanFilterTest.java 
b/phoenix-core/src/test/java/org/apache/phoenix/filter/SkipScanFilterTest.java
index 1e02c9de9d..025daa060e 100644
--- 
a/phoenix-core/src/test/java/org/apache/phoenix/filter/SkipScanFilterTest.java
+++ 
b/phoenix-core/src/test/java/org/apache/phoenix/filter/SkipScanFilterTest.java
@@ -646,7 +646,7 @@ public class SkipScanFilterTest extends TestCase {
             KeyValue kv = KeyValueUtil.createFirstOnRow(rowkey);
             skipper.reset();
             assertFalse(skipper.filterAllRemaining());
-            assertFalse(skipper.filterRowKey(kv.getBuffer(), 
kv.getRowOffset(), kv.getRowLength()));
+            assertFalse(skipper.filterRowKey(kv));
 
             assertEquals(ReturnCode.SEEK_NEXT_USING_HINT, 
skipper.filterCell(kv));
             assertEquals(KeyValueUtil.createFirstOnRow(hint), 
skipper.getNextCellHint(kv));
@@ -672,7 +672,7 @@ public class SkipScanFilterTest extends TestCase {
             KeyValue kv = KeyValueUtil.createFirstOnRow(rowkey);
             skipper.reset();
             assertFalse(skipper.filterAllRemaining());
-            assertFalse(skipper.filterRowKey(kv.getBuffer(), 
kv.getRowOffset(), kv.getRowLength()));
+            assertFalse(skipper.filterRowKey(kv));
             assertEquals(kv.toString(), ReturnCode.INCLUDE_AND_NEXT_COL, 
skipper.filterCell(kv));
         }
 
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/NewerTimestampFilter.java
 
b/phoenix-hbase-compat-2.4.1/src/main/java/org/apache/phoenix/compat/hbase/ByteStringer.java
similarity index 52%
copy from 
phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/NewerTimestampFilter.java
copy to 
phoenix-hbase-compat-2.4.1/src/main/java/org/apache/phoenix/compat/hbase/ByteStringer.java
index 85d16d9015..595aa31eae 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/NewerTimestampFilter.java
+++ 
b/phoenix-hbase-compat-2.4.1/src/main/java/org/apache/phoenix/compat/hbase/ByteStringer.java
@@ -15,33 +15,17 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package org.apache.phoenix.compat.hbase;
 
-package org.apache.phoenix.hbase.index.covered.filter;
+import com.google.protobuf.ByteString;
 
-import org.apache.hadoop.hbase.Cell;
-import org.apache.hadoop.hbase.filter.FilterBase;
+// This has different signature in the HBase 2 and 3 modules
+// This only comes together after the maven-replacer plugin relocates all 
protobuf code.
+public class ByteStringer {
 
-/**
- * Server-side only class used in the indexer to filter out keyvalues newer 
than a given timestamp
- * (so allows anything {@code <= } timestamp through).
- * <p>
- */
-public class NewerTimestampFilter extends FilterBase {
-
-  private long timestamp;
-
-  public NewerTimestampFilter(long timestamp) {
-    this.timestamp = timestamp;
-  }
-
-  @Override
-  public ReturnCode filterKeyValue(Cell ignored) {
-    return this.filterCell(ignored);
-  }
-
-  @Override
-  public ReturnCode filterCell(Cell ignored) {
-    return ignored.getTimestamp() > timestamp ? ReturnCode.SKIP : 
ReturnCode.INCLUDE;
-  }
+    private ByteStringer() { }
 
-}
\ No newline at end of file
+    public static ByteString wrap(final byte[] array) {
+        return org.apache.hadoop.hbase.util.ByteStringer.wrap(array);
+    }
+}
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/NewerTimestampFilter.java
 
b/phoenix-hbase-compat-2.4.1/src/main/java/org/apache/phoenix/compat/hbase/CompatDelegateFilter.java
similarity index 58%
copy from 
phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/NewerTimestampFilter.java
copy to 
phoenix-hbase-compat-2.4.1/src/main/java/org/apache/phoenix/compat/hbase/CompatDelegateFilter.java
index 85d16d9015..83cd70c73c 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/NewerTimestampFilter.java
+++ 
b/phoenix-hbase-compat-2.4.1/src/main/java/org/apache/phoenix/compat/hbase/CompatDelegateFilter.java
@@ -15,33 +15,24 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package org.apache.phoenix.compat.hbase;
 
-package org.apache.phoenix.hbase.index.covered.filter;
+import java.io.IOException;
 
 import org.apache.hadoop.hbase.Cell;
+import org.apache.hadoop.hbase.filter.Filter;
 import org.apache.hadoop.hbase.filter.FilterBase;
 
-/**
- * Server-side only class used in the indexer to filter out keyvalues newer 
than a given timestamp
- * (so allows anything {@code <= } timestamp through).
- * <p>
- */
-public class NewerTimestampFilter extends FilterBase {
-
-  private long timestamp;
-
-  public NewerTimestampFilter(long timestamp) {
-    this.timestamp = timestamp;
-  }
+public class CompatDelegateFilter extends FilterBase {
+    protected Filter delegate = null;
 
-  @Override
-  public ReturnCode filterKeyValue(Cell ignored) {
-    return this.filterCell(ignored);
-  }
+    public CompatDelegateFilter(Filter delegate) {
+        this.delegate = delegate;
+    }
 
-  @Override
-  public ReturnCode filterCell(Cell ignored) {
-    return ignored.getTimestamp() > timestamp ? ReturnCode.SKIP : 
ReturnCode.INCLUDE;
-  }
+    @Override
+    public ReturnCode filterKeyValue(Cell v) throws IOException {
+        return delegate.filterKeyValue(v);
+    }
 
-}
\ No newline at end of file
+}
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/filter/AllVersionsIndexRebuildFilter.java
 
b/phoenix-hbase-compat-2.4.1/src/main/java/org/apache/phoenix/compat/hbase/CompatPagingFilter.java
similarity index 58%
copy from 
phoenix-core-client/src/main/java/org/apache/phoenix/filter/AllVersionsIndexRebuildFilter.java
copy to 
phoenix-hbase-compat-2.4.1/src/main/java/org/apache/phoenix/compat/hbase/CompatPagingFilter.java
index f52c933679..547d29dd35 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/filter/AllVersionsIndexRebuildFilter.java
+++ 
b/phoenix-hbase-compat-2.4.1/src/main/java/org/apache/phoenix/compat/hbase/CompatPagingFilter.java
@@ -15,36 +15,27 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.phoenix.filter;
+package org.apache.phoenix.compat.hbase;
 
 import java.io.IOException;
 
 import org.apache.hadoop.hbase.Cell;
 import org.apache.hadoop.hbase.filter.Filter;
+import org.apache.hadoop.hbase.filter.FilterBase;
 
-/**
- * This filter overrides the behavior of delegate so that we do not jump to 
the next
- * column as soon as we find a value for a column but rather include all 
versions which is
- * needed for rebuilds.
- */
-public class AllVersionsIndexRebuildFilter extends DelegateFilter {
+public abstract class CompatPagingFilter extends FilterBase {
+    protected Filter delegate = null;
 
-    public AllVersionsIndexRebuildFilter(Filter originalFilter) {
-        super(originalFilter);
+    public CompatPagingFilter(Filter delegate) {
+        this.delegate = delegate;
     }
 
     @Override
     public ReturnCode filterKeyValue(Cell v) throws IOException {
-        return filterCell(v);
-    }
 
-    @Override
-    public ReturnCode filterCell(Cell v) throws IOException {
-        ReturnCode delegateCode = super.filterCell(v);
-        if (delegateCode == ReturnCode.INCLUDE_AND_NEXT_COL) {
-            return ReturnCode.INCLUDE;
-        } else {
-            return delegateCode;
+        if (delegate != null) {
+            return delegate.filterKeyValue(v);
         }
+        return super.filterKeyValue(v);
     }
 }
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/NewerTimestampFilter.java
 
b/phoenix-hbase-compat-2.4.1/src/main/java/org/apache/phoenix/compat/hbase/package-info.java
similarity index 52%
copy from 
phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/NewerTimestampFilter.java
copy to 
phoenix-hbase-compat-2.4.1/src/main/java/org/apache/phoenix/compat/hbase/package-info.java
index 85d16d9015..7c098f4971 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/NewerTimestampFilter.java
+++ 
b/phoenix-hbase-compat-2.4.1/src/main/java/org/apache/phoenix/compat/hbase/package-info.java
@@ -16,32 +16,8 @@
  * limitations under the License.
  */
 
-package org.apache.phoenix.hbase.index.covered.filter;
-
-import org.apache.hadoop.hbase.Cell;
-import org.apache.hadoop.hbase.filter.FilterBase;
-
 /**
- * Server-side only class used in the indexer to filter out keyvalues newer 
than a given timestamp
- * (so allows anything {@code <= } timestamp through).
- * <p>
+ * This package contains compatibility classes for bridging differences
+ * between different versions of HBase.
  */
-public class NewerTimestampFilter extends FilterBase {
-
-  private long timestamp;
-
-  public NewerTimestampFilter(long timestamp) {
-    this.timestamp = timestamp;
-  }
-
-  @Override
-  public ReturnCode filterKeyValue(Cell ignored) {
-    return this.filterCell(ignored);
-  }
-
-  @Override
-  public ReturnCode filterCell(Cell ignored) {
-    return ignored.getTimestamp() > timestamp ? ReturnCode.SKIP : 
ReturnCode.INCLUDE;
-  }
-
-}
\ No newline at end of file
+package org.apache.phoenix.compat.hbase;
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/NewerTimestampFilter.java
 
b/phoenix-hbase-compat-2.5.0/src/main/java/org/apache/phoenix/compat/hbase/ByteStringer.java
similarity index 52%
copy from 
phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/NewerTimestampFilter.java
copy to 
phoenix-hbase-compat-2.5.0/src/main/java/org/apache/phoenix/compat/hbase/ByteStringer.java
index 85d16d9015..595aa31eae 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/NewerTimestampFilter.java
+++ 
b/phoenix-hbase-compat-2.5.0/src/main/java/org/apache/phoenix/compat/hbase/ByteStringer.java
@@ -15,33 +15,17 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package org.apache.phoenix.compat.hbase;
 
-package org.apache.phoenix.hbase.index.covered.filter;
+import com.google.protobuf.ByteString;
 
-import org.apache.hadoop.hbase.Cell;
-import org.apache.hadoop.hbase.filter.FilterBase;
+// This has different signature in the HBase 2 and 3 modules
+// This only comes together after the maven-replacer plugin relocates all 
protobuf code.
+public class ByteStringer {
 
-/**
- * Server-side only class used in the indexer to filter out keyvalues newer 
than a given timestamp
- * (so allows anything {@code <= } timestamp through).
- * <p>
- */
-public class NewerTimestampFilter extends FilterBase {
-
-  private long timestamp;
-
-  public NewerTimestampFilter(long timestamp) {
-    this.timestamp = timestamp;
-  }
-
-  @Override
-  public ReturnCode filterKeyValue(Cell ignored) {
-    return this.filterCell(ignored);
-  }
-
-  @Override
-  public ReturnCode filterCell(Cell ignored) {
-    return ignored.getTimestamp() > timestamp ? ReturnCode.SKIP : 
ReturnCode.INCLUDE;
-  }
+    private ByteStringer() { }
 
-}
\ No newline at end of file
+    public static ByteString wrap(final byte[] array) {
+        return org.apache.hadoop.hbase.util.ByteStringer.wrap(array);
+    }
+}
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/NewerTimestampFilter.java
 
b/phoenix-hbase-compat-2.5.0/src/main/java/org/apache/phoenix/compat/hbase/CompatDelegateFilter.java
similarity index 58%
copy from 
phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/NewerTimestampFilter.java
copy to 
phoenix-hbase-compat-2.5.0/src/main/java/org/apache/phoenix/compat/hbase/CompatDelegateFilter.java
index 85d16d9015..83cd70c73c 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/NewerTimestampFilter.java
+++ 
b/phoenix-hbase-compat-2.5.0/src/main/java/org/apache/phoenix/compat/hbase/CompatDelegateFilter.java
@@ -15,33 +15,24 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package org.apache.phoenix.compat.hbase;
 
-package org.apache.phoenix.hbase.index.covered.filter;
+import java.io.IOException;
 
 import org.apache.hadoop.hbase.Cell;
+import org.apache.hadoop.hbase.filter.Filter;
 import org.apache.hadoop.hbase.filter.FilterBase;
 
-/**
- * Server-side only class used in the indexer to filter out keyvalues newer 
than a given timestamp
- * (so allows anything {@code <= } timestamp through).
- * <p>
- */
-public class NewerTimestampFilter extends FilterBase {
-
-  private long timestamp;
-
-  public NewerTimestampFilter(long timestamp) {
-    this.timestamp = timestamp;
-  }
+public class CompatDelegateFilter extends FilterBase {
+    protected Filter delegate = null;
 
-  @Override
-  public ReturnCode filterKeyValue(Cell ignored) {
-    return this.filterCell(ignored);
-  }
+    public CompatDelegateFilter(Filter delegate) {
+        this.delegate = delegate;
+    }
 
-  @Override
-  public ReturnCode filterCell(Cell ignored) {
-    return ignored.getTimestamp() > timestamp ? ReturnCode.SKIP : 
ReturnCode.INCLUDE;
-  }
+    @Override
+    public ReturnCode filterKeyValue(Cell v) throws IOException {
+        return delegate.filterKeyValue(v);
+    }
 
-}
\ No newline at end of file
+}
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/filter/AllVersionsIndexRebuildFilter.java
 
b/phoenix-hbase-compat-2.5.0/src/main/java/org/apache/phoenix/compat/hbase/CompatPagingFilter.java
similarity index 58%
copy from 
phoenix-core-client/src/main/java/org/apache/phoenix/filter/AllVersionsIndexRebuildFilter.java
copy to 
phoenix-hbase-compat-2.5.0/src/main/java/org/apache/phoenix/compat/hbase/CompatPagingFilter.java
index f52c933679..547d29dd35 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/filter/AllVersionsIndexRebuildFilter.java
+++ 
b/phoenix-hbase-compat-2.5.0/src/main/java/org/apache/phoenix/compat/hbase/CompatPagingFilter.java
@@ -15,36 +15,27 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.phoenix.filter;
+package org.apache.phoenix.compat.hbase;
 
 import java.io.IOException;
 
 import org.apache.hadoop.hbase.Cell;
 import org.apache.hadoop.hbase.filter.Filter;
+import org.apache.hadoop.hbase.filter.FilterBase;
 
-/**
- * This filter overrides the behavior of delegate so that we do not jump to 
the next
- * column as soon as we find a value for a column but rather include all 
versions which is
- * needed for rebuilds.
- */
-public class AllVersionsIndexRebuildFilter extends DelegateFilter {
+public abstract class CompatPagingFilter extends FilterBase {
+    protected Filter delegate = null;
 
-    public AllVersionsIndexRebuildFilter(Filter originalFilter) {
-        super(originalFilter);
+    public CompatPagingFilter(Filter delegate) {
+        this.delegate = delegate;
     }
 
     @Override
     public ReturnCode filterKeyValue(Cell v) throws IOException {
-        return filterCell(v);
-    }
 
-    @Override
-    public ReturnCode filterCell(Cell v) throws IOException {
-        ReturnCode delegateCode = super.filterCell(v);
-        if (delegateCode == ReturnCode.INCLUDE_AND_NEXT_COL) {
-            return ReturnCode.INCLUDE;
-        } else {
-            return delegateCode;
+        if (delegate != null) {
+            return delegate.filterKeyValue(v);
         }
+        return super.filterKeyValue(v);
     }
 }
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/NewerTimestampFilter.java
 
b/phoenix-hbase-compat-2.5.0/src/main/java/org/apache/phoenix/compat/hbase/package-info.java
similarity index 52%
copy from 
phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/NewerTimestampFilter.java
copy to 
phoenix-hbase-compat-2.5.0/src/main/java/org/apache/phoenix/compat/hbase/package-info.java
index 85d16d9015..7c098f4971 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/NewerTimestampFilter.java
+++ 
b/phoenix-hbase-compat-2.5.0/src/main/java/org/apache/phoenix/compat/hbase/package-info.java
@@ -16,32 +16,8 @@
  * limitations under the License.
  */
 
-package org.apache.phoenix.hbase.index.covered.filter;
-
-import org.apache.hadoop.hbase.Cell;
-import org.apache.hadoop.hbase.filter.FilterBase;
-
 /**
- * Server-side only class used in the indexer to filter out keyvalues newer 
than a given timestamp
- * (so allows anything {@code <= } timestamp through).
- * <p>
+ * This package contains compatibility classes for bridging differences
+ * between different versions of HBase.
  */
-public class NewerTimestampFilter extends FilterBase {
-
-  private long timestamp;
-
-  public NewerTimestampFilter(long timestamp) {
-    this.timestamp = timestamp;
-  }
-
-  @Override
-  public ReturnCode filterKeyValue(Cell ignored) {
-    return this.filterCell(ignored);
-  }
-
-  @Override
-  public ReturnCode filterCell(Cell ignored) {
-    return ignored.getTimestamp() > timestamp ? ReturnCode.SKIP : 
ReturnCode.INCLUDE;
-  }
-
-}
\ No newline at end of file
+package org.apache.phoenix.compat.hbase;
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/NewerTimestampFilter.java
 
b/phoenix-hbase-compat-2.5.4/src/main/java/org/apache/phoenix/compat/hbase/ByteStringer.java
similarity index 52%
copy from 
phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/NewerTimestampFilter.java
copy to 
phoenix-hbase-compat-2.5.4/src/main/java/org/apache/phoenix/compat/hbase/ByteStringer.java
index 85d16d9015..595aa31eae 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/NewerTimestampFilter.java
+++ 
b/phoenix-hbase-compat-2.5.4/src/main/java/org/apache/phoenix/compat/hbase/ByteStringer.java
@@ -15,33 +15,17 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package org.apache.phoenix.compat.hbase;
 
-package org.apache.phoenix.hbase.index.covered.filter;
+import com.google.protobuf.ByteString;
 
-import org.apache.hadoop.hbase.Cell;
-import org.apache.hadoop.hbase.filter.FilterBase;
+// This has different signature in the HBase 2 and 3 modules
+// This only comes together after the maven-replacer plugin relocates all 
protobuf code.
+public class ByteStringer {
 
-/**
- * Server-side only class used in the indexer to filter out keyvalues newer 
than a given timestamp
- * (so allows anything {@code <= } timestamp through).
- * <p>
- */
-public class NewerTimestampFilter extends FilterBase {
-
-  private long timestamp;
-
-  public NewerTimestampFilter(long timestamp) {
-    this.timestamp = timestamp;
-  }
-
-  @Override
-  public ReturnCode filterKeyValue(Cell ignored) {
-    return this.filterCell(ignored);
-  }
-
-  @Override
-  public ReturnCode filterCell(Cell ignored) {
-    return ignored.getTimestamp() > timestamp ? ReturnCode.SKIP : 
ReturnCode.INCLUDE;
-  }
+    private ByteStringer() { }
 
-}
\ No newline at end of file
+    public static ByteString wrap(final byte[] array) {
+        return org.apache.hadoop.hbase.util.ByteStringer.wrap(array);
+    }
+}
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/filter/AllVersionsIndexRebuildFilter.java
 
b/phoenix-hbase-compat-2.5.4/src/main/java/org/apache/phoenix/compat/hbase/CompatDelegateFilter.java
similarity index 59%
copy from 
phoenix-core-client/src/main/java/org/apache/phoenix/filter/AllVersionsIndexRebuildFilter.java
copy to 
phoenix-hbase-compat-2.5.4/src/main/java/org/apache/phoenix/compat/hbase/CompatDelegateFilter.java
index f52c933679..64d5c15e52 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/filter/AllVersionsIndexRebuildFilter.java
+++ 
b/phoenix-hbase-compat-2.5.4/src/main/java/org/apache/phoenix/compat/hbase/CompatDelegateFilter.java
@@ -15,36 +15,28 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.phoenix.filter;
+package org.apache.phoenix.compat.hbase;
 
 import java.io.IOException;
 
 import org.apache.hadoop.hbase.Cell;
 import org.apache.hadoop.hbase.filter.Filter;
+import org.apache.hadoop.hbase.filter.FilterBase;
 
-/**
- * This filter overrides the behavior of delegate so that we do not jump to 
the next
- * column as soon as we find a value for a column but rather include all 
versions which is
- * needed for rebuilds.
- */
-public class AllVersionsIndexRebuildFilter extends DelegateFilter {
+public class CompatDelegateFilter extends FilterBase {
+    protected Filter delegate = null;
 
-    public AllVersionsIndexRebuildFilter(Filter originalFilter) {
-        super(originalFilter);
+    public CompatDelegateFilter(Filter delegate) {
+        this.delegate = delegate;
     }
 
     @Override
     public ReturnCode filterKeyValue(Cell v) throws IOException {
-        return filterCell(v);
+        return delegate.filterKeyValue(v);
     }
 
     @Override
-    public ReturnCode filterCell(Cell v) throws IOException {
-        ReturnCode delegateCode = super.filterCell(v);
-        if (delegateCode == ReturnCode.INCLUDE_AND_NEXT_COL) {
-            return ReturnCode.INCLUDE;
-        } else {
-            return delegateCode;
-        }
+    public boolean filterRowKey(byte[] buffer, int offset, int length) throws 
IOException {
+        return delegate.filterRowKey(buffer, offset, length);
     }
 }
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/filter/AllVersionsIndexRebuildFilter.java
 
b/phoenix-hbase-compat-2.5.4/src/main/java/org/apache/phoenix/compat/hbase/CompatPagingFilter.java
similarity index 58%
copy from 
phoenix-core-client/src/main/java/org/apache/phoenix/filter/AllVersionsIndexRebuildFilter.java
copy to 
phoenix-hbase-compat-2.5.4/src/main/java/org/apache/phoenix/compat/hbase/CompatPagingFilter.java
index f52c933679..547d29dd35 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/filter/AllVersionsIndexRebuildFilter.java
+++ 
b/phoenix-hbase-compat-2.5.4/src/main/java/org/apache/phoenix/compat/hbase/CompatPagingFilter.java
@@ -15,36 +15,27 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.phoenix.filter;
+package org.apache.phoenix.compat.hbase;
 
 import java.io.IOException;
 
 import org.apache.hadoop.hbase.Cell;
 import org.apache.hadoop.hbase.filter.Filter;
+import org.apache.hadoop.hbase.filter.FilterBase;
 
-/**
- * This filter overrides the behavior of delegate so that we do not jump to 
the next
- * column as soon as we find a value for a column but rather include all 
versions which is
- * needed for rebuilds.
- */
-public class AllVersionsIndexRebuildFilter extends DelegateFilter {
+public abstract class CompatPagingFilter extends FilterBase {
+    protected Filter delegate = null;
 
-    public AllVersionsIndexRebuildFilter(Filter originalFilter) {
-        super(originalFilter);
+    public CompatPagingFilter(Filter delegate) {
+        this.delegate = delegate;
     }
 
     @Override
     public ReturnCode filterKeyValue(Cell v) throws IOException {
-        return filterCell(v);
-    }
 
-    @Override
-    public ReturnCode filterCell(Cell v) throws IOException {
-        ReturnCode delegateCode = super.filterCell(v);
-        if (delegateCode == ReturnCode.INCLUDE_AND_NEXT_COL) {
-            return ReturnCode.INCLUDE;
-        } else {
-            return delegateCode;
+        if (delegate != null) {
+            return delegate.filterKeyValue(v);
         }
+        return super.filterKeyValue(v);
     }
 }
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/NewerTimestampFilter.java
 
b/phoenix-hbase-compat-2.5.4/src/main/java/org/apache/phoenix/compat/hbase/package-info.java
similarity index 52%
copy from 
phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/NewerTimestampFilter.java
copy to 
phoenix-hbase-compat-2.5.4/src/main/java/org/apache/phoenix/compat/hbase/package-info.java
index 85d16d9015..7c098f4971 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/NewerTimestampFilter.java
+++ 
b/phoenix-hbase-compat-2.5.4/src/main/java/org/apache/phoenix/compat/hbase/package-info.java
@@ -16,32 +16,8 @@
  * limitations under the License.
  */
 
-package org.apache.phoenix.hbase.index.covered.filter;
-
-import org.apache.hadoop.hbase.Cell;
-import org.apache.hadoop.hbase.filter.FilterBase;
-
 /**
- * Server-side only class used in the indexer to filter out keyvalues newer 
than a given timestamp
- * (so allows anything {@code <= } timestamp through).
- * <p>
+ * This package contains compatibility classes for bridging differences
+ * between different versions of HBase.
  */
-public class NewerTimestampFilter extends FilterBase {
-
-  private long timestamp;
-
-  public NewerTimestampFilter(long timestamp) {
-    this.timestamp = timestamp;
-  }
-
-  @Override
-  public ReturnCode filterKeyValue(Cell ignored) {
-    return this.filterCell(ignored);
-  }
-
-  @Override
-  public ReturnCode filterCell(Cell ignored) {
-    return ignored.getTimestamp() > timestamp ? ReturnCode.SKIP : 
ReturnCode.INCLUDE;
-  }
-
-}
\ No newline at end of file
+package org.apache.phoenix.compat.hbase;
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/NewerTimestampFilter.java
 
b/phoenix-hbase-compat-2.6.0/src/main/java/org/apache/phoenix/compat/hbase/ByteStringer.java
similarity index 52%
copy from 
phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/NewerTimestampFilter.java
copy to 
phoenix-hbase-compat-2.6.0/src/main/java/org/apache/phoenix/compat/hbase/ByteStringer.java
index 85d16d9015..595aa31eae 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/NewerTimestampFilter.java
+++ 
b/phoenix-hbase-compat-2.6.0/src/main/java/org/apache/phoenix/compat/hbase/ByteStringer.java
@@ -15,33 +15,17 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package org.apache.phoenix.compat.hbase;
 
-package org.apache.phoenix.hbase.index.covered.filter;
+import com.google.protobuf.ByteString;
 
-import org.apache.hadoop.hbase.Cell;
-import org.apache.hadoop.hbase.filter.FilterBase;
+// This has different signature in the HBase 2 and 3 modules
+// This only comes together after the maven-replacer plugin relocates all 
protobuf code.
+public class ByteStringer {
 
-/**
- * Server-side only class used in the indexer to filter out keyvalues newer 
than a given timestamp
- * (so allows anything {@code <= } timestamp through).
- * <p>
- */
-public class NewerTimestampFilter extends FilterBase {
-
-  private long timestamp;
-
-  public NewerTimestampFilter(long timestamp) {
-    this.timestamp = timestamp;
-  }
-
-  @Override
-  public ReturnCode filterKeyValue(Cell ignored) {
-    return this.filterCell(ignored);
-  }
-
-  @Override
-  public ReturnCode filterCell(Cell ignored) {
-    return ignored.getTimestamp() > timestamp ? ReturnCode.SKIP : 
ReturnCode.INCLUDE;
-  }
+    private ByteStringer() { }
 
-}
\ No newline at end of file
+    public static ByteString wrap(final byte[] array) {
+        return org.apache.hadoop.hbase.util.ByteStringer.wrap(array);
+    }
+}
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/NewerTimestampFilter.java
 
b/phoenix-hbase-compat-2.6.0/src/main/java/org/apache/phoenix/compat/hbase/CompatDelegateFilter.java
similarity index 58%
copy from 
phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/NewerTimestampFilter.java
copy to 
phoenix-hbase-compat-2.6.0/src/main/java/org/apache/phoenix/compat/hbase/CompatDelegateFilter.java
index 85d16d9015..83cd70c73c 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/NewerTimestampFilter.java
+++ 
b/phoenix-hbase-compat-2.6.0/src/main/java/org/apache/phoenix/compat/hbase/CompatDelegateFilter.java
@@ -15,33 +15,24 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package org.apache.phoenix.compat.hbase;
 
-package org.apache.phoenix.hbase.index.covered.filter;
+import java.io.IOException;
 
 import org.apache.hadoop.hbase.Cell;
+import org.apache.hadoop.hbase.filter.Filter;
 import org.apache.hadoop.hbase.filter.FilterBase;
 
-/**
- * Server-side only class used in the indexer to filter out keyvalues newer 
than a given timestamp
- * (so allows anything {@code <= } timestamp through).
- * <p>
- */
-public class NewerTimestampFilter extends FilterBase {
-
-  private long timestamp;
-
-  public NewerTimestampFilter(long timestamp) {
-    this.timestamp = timestamp;
-  }
+public class CompatDelegateFilter extends FilterBase {
+    protected Filter delegate = null;
 
-  @Override
-  public ReturnCode filterKeyValue(Cell ignored) {
-    return this.filterCell(ignored);
-  }
+    public CompatDelegateFilter(Filter delegate) {
+        this.delegate = delegate;
+    }
 
-  @Override
-  public ReturnCode filterCell(Cell ignored) {
-    return ignored.getTimestamp() > timestamp ? ReturnCode.SKIP : 
ReturnCode.INCLUDE;
-  }
+    @Override
+    public ReturnCode filterKeyValue(Cell v) throws IOException {
+        return delegate.filterKeyValue(v);
+    }
 
-}
\ No newline at end of file
+}
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/filter/AllVersionsIndexRebuildFilter.java
 
b/phoenix-hbase-compat-2.6.0/src/main/java/org/apache/phoenix/compat/hbase/CompatPagingFilter.java
similarity index 58%
copy from 
phoenix-core-client/src/main/java/org/apache/phoenix/filter/AllVersionsIndexRebuildFilter.java
copy to 
phoenix-hbase-compat-2.6.0/src/main/java/org/apache/phoenix/compat/hbase/CompatPagingFilter.java
index f52c933679..547d29dd35 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/filter/AllVersionsIndexRebuildFilter.java
+++ 
b/phoenix-hbase-compat-2.6.0/src/main/java/org/apache/phoenix/compat/hbase/CompatPagingFilter.java
@@ -15,36 +15,27 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.phoenix.filter;
+package org.apache.phoenix.compat.hbase;
 
 import java.io.IOException;
 
 import org.apache.hadoop.hbase.Cell;
 import org.apache.hadoop.hbase.filter.Filter;
+import org.apache.hadoop.hbase.filter.FilterBase;
 
-/**
- * This filter overrides the behavior of delegate so that we do not jump to 
the next
- * column as soon as we find a value for a column but rather include all 
versions which is
- * needed for rebuilds.
- */
-public class AllVersionsIndexRebuildFilter extends DelegateFilter {
+public abstract class CompatPagingFilter extends FilterBase {
+    protected Filter delegate = null;
 
-    public AllVersionsIndexRebuildFilter(Filter originalFilter) {
-        super(originalFilter);
+    public CompatPagingFilter(Filter delegate) {
+        this.delegate = delegate;
     }
 
     @Override
     public ReturnCode filterKeyValue(Cell v) throws IOException {
-        return filterCell(v);
-    }
 
-    @Override
-    public ReturnCode filterCell(Cell v) throws IOException {
-        ReturnCode delegateCode = super.filterCell(v);
-        if (delegateCode == ReturnCode.INCLUDE_AND_NEXT_COL) {
-            return ReturnCode.INCLUDE;
-        } else {
-            return delegateCode;
+        if (delegate != null) {
+            return delegate.filterKeyValue(v);
         }
+        return super.filterKeyValue(v);
     }
 }
diff --git 
a/phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/NewerTimestampFilter.java
 
b/phoenix-hbase-compat-2.6.0/src/main/java/org/apache/phoenix/compat/hbase/package-info.java
similarity index 52%
copy from 
phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/NewerTimestampFilter.java
copy to 
phoenix-hbase-compat-2.6.0/src/main/java/org/apache/phoenix/compat/hbase/package-info.java
index 85d16d9015..7c098f4971 100644
--- 
a/phoenix-core-client/src/main/java/org/apache/phoenix/hbase/index/covered/filter/NewerTimestampFilter.java
+++ 
b/phoenix-hbase-compat-2.6.0/src/main/java/org/apache/phoenix/compat/hbase/package-info.java
@@ -16,32 +16,8 @@
  * limitations under the License.
  */
 
-package org.apache.phoenix.hbase.index.covered.filter;
-
-import org.apache.hadoop.hbase.Cell;
-import org.apache.hadoop.hbase.filter.FilterBase;
-
 /**
- * Server-side only class used in the indexer to filter out keyvalues newer 
than a given timestamp
- * (so allows anything {@code <= } timestamp through).
- * <p>
+ * This package contains compatibility classes for bridging differences
+ * between different versions of HBase.
  */
-public class NewerTimestampFilter extends FilterBase {
-
-  private long timestamp;
-
-  public NewerTimestampFilter(long timestamp) {
-    this.timestamp = timestamp;
-  }
-
-  @Override
-  public ReturnCode filterKeyValue(Cell ignored) {
-    return this.filterCell(ignored);
-  }
-
-  @Override
-  public ReturnCode filterCell(Cell ignored) {
-    return ignored.getTimestamp() > timestamp ? ReturnCode.SKIP : 
ReturnCode.INCLUDE;
-  }
-
-}
\ No newline at end of file
+package org.apache.phoenix.compat.hbase;

Reply via email to