diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java index 0e9e637..d8f27ec 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java @@ -593,6 +593,11 @@ public class ScanQueryMatcher { } } + public int compareKeyForHint(Cell nextIndexed, Cell kv) throws IOException { + Cell hint = getNextKeyHint(kv); + return hint == null ? 1 : rowComparator.compare(nextIndexed, hint); + } + //Used only for testing purposes static MatchCode checkColumn(ColumnTracker columnTracker, byte[] bytes, int offset, int length, long ttl, byte type, boolean ignoreCount) throws IOException { @@ -624,11 +629,6 @@ public class ScanQueryMatcher { SKIP, /** - * Do not include, jump to next StoreFile or memstore (in time order) - */ - NEXT, - - /** * Do not include, return current result */ DONE, diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java index 2cb0b61..e29a3cd 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java @@ -675,7 +675,8 @@ public class StoreScanner extends NonReversedNonLazyKeyValueScanner * See if we should actually SEEK or rather just SKIP to the next Cell. * (see HBASE-13109) */ - private ScanQueryMatcher.MatchCode optimize(ScanQueryMatcher.MatchCode qcode, Cell cell) { + private ScanQueryMatcher.MatchCode optimize(ScanQueryMatcher.MatchCode qcode, Cell cell) + throws IOException { Cell nextIndexedKey = getNextIndexedKey(); if (nextIndexedKey == null || nextIndexedKey == HConstants.NO_NEXT_INDEXED_KEY || store == null) { @@ -698,6 +699,11 @@ public class StoreScanner extends NonReversedNonLazyKeyValueScanner } break; } + case SEEK_NEXT_USING_HINT: + if (matcher.compareKeyForHint(nextIndexedKey, cell) >= 0) { + return MatchCode.SKIP; + } + break; default: break; }