.../hadoop/hbase/regionserver/StoreFile.java | 23 ++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFile.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFile.java index eb76440..87fed6d 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFile.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFile.java @@ -1362,22 +1362,29 @@ public class StoreFile { && Bytes.equals(scan.getStopRow(), HConstants.EMPTY_END_ROW)) { return true; } - KeyValue smallestScanKeyValue = scan.isReversed() ? KeyValueUtil - .createFirstOnRow(scan.getStopRow()) : KeyValueUtil.createFirstOnRow(scan - .getStartRow()); - KeyValue largestScanKeyValue = scan.isReversed() ? KeyValueUtil - .createLastOnRow(scan.getStartRow()) : KeyValueUtil.createLastOnRow(scan - .getStopRow()); + byte[] smallestScanRow = scan.isReversed() ? scan.getStopRow() : scan.getStartRow(); + byte[] largestScanRow = scan.isReversed() ? scan.getStartRow() : scan.getStopRow(); Cell firstKeyKV = this.getFirstKey(); Cell lastKeyKV = this.getLastKey(); - boolean nonOverLapping = ((getComparator().compare(firstKeyKV, largestScanKeyValue)) > 0 + boolean nonOverLapping = (getComparator().compareRows(firstKeyKV, + largestScanRow, 0, largestScanRow.length) > 0 && !Bytes .equals(scan.isReversed() ? scan.getStartRow() : scan.getStopRow(), HConstants.EMPTY_END_ROW)) - || (getComparator().compare(lastKeyKV, smallestScanKeyValue)) < 0; + || compareLastKey(lastKeyKV, smallestScanRow) < 0; return !nonOverLapping; } + protected int compareLastKey(Cell lastKeyKV, byte[] scanRow) { + int diff = getComparator().compareRows(lastKeyKV, scanRow, 0, scanRow.length); + if (diff != 0) { + return diff; + } + // if the rows does not match then atleast the family or qualifier will make the + // lastKeyKV greater. There should not be a need to compare the ts + return 1; + } + public Map loadFileInfo() throws IOException { Map fi = reader.loadFileInfo();