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..3007e26 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 @@ -5555,11 +5555,26 @@ 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 'stopRow' exactly for the current region scan. + if (!scan.isReversed()) { + 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 { + 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(); + } + } } 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;