diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java index d059cd0..e3d3bd6 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java @@ -5554,12 +5554,23 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi */ defaultScannerContext = ScannerContext.newBuilder() .setBatchLimit(scan.getBatch()).build(); - - if (Bytes.equals(scan.getStopRow(), HConstants.EMPTY_END_ROW) && !scan.isGetScan()) { - this.stopRow = null; + + // To resolve HBASE-15097,we should set the exactly 'stopRow' for the current region scan. + if (Bytes.equals(this.region.getRegionInfo().getEndKey(), HConstants.EMPTY_END_ROW)) { + if (Bytes.equals(scan.getStopRow(), HConstants.EMPTY_END_ROW)) { + this.stopRow = null; + } else { + this.stopRow = scan.getStopRow(); + } } else { - this.stopRow = scan.getStopRow(); + if (Bytes.equals(scan.getStopRow(), HConstants.EMPTY_END_ROW) + || Bytes.compareTo(scan.getStopRow(), this.getRegionInfo().getEndKey()) >= 0) { + this.stopRow = this.region.getRegionInfo().getEndKey(); + } else { + this.stopRow = scan.getStopRow(); + } } + // If we are doing a get, we want to be [startRow,endRow]. Normally // it is [startRow,endRow) and if startRow=endRow we get nothing. this.isScan = scan.isGetScan() ? 1 : 0;