You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by el...@apache.org on 2018/03/19 17:29:48 UTC
[5/5] phoenix git commit: PHOENIX-4576 Correct local index wrongly
using child region scanners
PHOENIX-4576 Correct local index wrongly using child region scanners
Was causing failures in LocalIndexSplitMergeIT.
Signed-off-by: Josh Elser <el...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/9e936094
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/9e936094
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/9e936094
Branch: refs/heads/4.x-HBase-0.98
Commit: 9e936094cd782e6f3a9b6f9c895951eb9a962e0f
Parents: d924343
Author: Rajeshbabu Chintaguntla <ra...@apache.org>
Authored: Mon Mar 19 12:32:08 2018 -0400
Committer: Josh Elser <el...@apache.org>
Committed: Mon Mar 19 13:07:05 2018 -0400
----------------------------------------------------------------------
.../regionserver/IndexHalfStoreFileReaderGenerator.java | 10 ++++++++++
.../phoenix/coprocessor/BaseScannerRegionObserver.java | 2 +-
.../src/main/java/org/apache/phoenix/util/ScanUtil.java | 12 +++++-------
3 files changed, 16 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/phoenix/blob/9e936094/phoenix-core/src/main/java/org/apache/hadoop/hbase/regionserver/IndexHalfStoreFileReaderGenerator.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/hadoop/hbase/regionserver/IndexHalfStoreFileReaderGenerator.java b/phoenix-core/src/main/java/org/apache/hadoop/hbase/regionserver/IndexHalfStoreFileReaderGenerator.java
index ac90f88..034cce5 100644
--- a/phoenix-core/src/main/java/org/apache/hadoop/hbase/regionserver/IndexHalfStoreFileReaderGenerator.java
+++ b/phoenix-core/src/main/java/org/apache/hadoop/hbase/regionserver/IndexHalfStoreFileReaderGenerator.java
@@ -360,6 +360,16 @@ public class IndexHalfStoreFileReaderGenerator extends BaseRegionObserver {
());
final List<KeyValueScanner> keyValueScanners = new ArrayList<>(store
.getStorefiles().size() + 1);
+ byte[] startKey = c.getEnvironment().getRegionInfo().getStartKey();
+ byte[] endKey = c.getEnvironment().getRegionInfo().getEndKey();
+ // If the region start key is not the prefix of the scan start row then we can return empty
+ // scanners. This is possible during merge where one of the child region scan should not return any
+ // results as we go through merged region.
+ if (Bytes.compareTo(scan.getStartRow(), 0, startKey.length == 0 ? endKey.length
+ : startKey.length, startKey.length == 0 ? new byte[endKey.length] : startKey, 0,
+ startKey.length == 0 ? endKey.length : startKey.length) != 0) {
+ return keyValueScanners;
+ }
for (StoreFile storeFile : storeFiles) {
if (storeFile.isReference()) {
referenceStoreFiles.add(storeFile);
http://git-wip-us.apache.org/repos/asf/phoenix/blob/9e936094/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/BaseScannerRegionObserver.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/BaseScannerRegionObserver.java b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/BaseScannerRegionObserver.java
index 61be45a..150f48d 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/BaseScannerRegionObserver.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/BaseScannerRegionObserver.java
@@ -179,7 +179,7 @@ abstract public class BaseScannerRegionObserver extends BaseRegionObserver {
throw new DoNotRetryIOException(cause.getMessage(), cause);
}
if(isLocalIndex) {
- ScanUtil.setupLocalIndexScan(scan, lowerInclusiveRegionKey, upperExclusiveRegionKey);
+ ScanUtil.setupLocalIndexScan(scan);
}
}
http://git-wip-us.apache.org/repos/asf/phoenix/blob/9e936094/phoenix-core/src/main/java/org/apache/phoenix/util/ScanUtil.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/util/ScanUtil.java b/phoenix-core/src/main/java/org/apache/phoenix/util/ScanUtil.java
index a844226..9c710c1 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/util/ScanUtil.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/util/ScanUtil.java
@@ -652,15 +652,13 @@ public class ScanUtil {
}
/**
- * prefix region start key to the start row/stop row suffix and set as scan boundaries.
+ * Start key and stop key of the original scan from client are regions start and end keys so
+ * prefix scan start/stop key to the start row/stop row suffix and set them as scan boundaries.
* @param scan
- * @param lowerInclusiveRegionKey
- * @param upperExclusiveRegionKey
*/
- public static void setupLocalIndexScan(Scan scan, byte[] lowerInclusiveRegionKey,
- byte[] upperExclusiveRegionKey) {
- byte[] prefix = lowerInclusiveRegionKey.length == 0 ? new byte[upperExclusiveRegionKey.length]: lowerInclusiveRegionKey;
- int prefixLength = lowerInclusiveRegionKey.length == 0? upperExclusiveRegionKey.length: lowerInclusiveRegionKey.length;
+ public static void setupLocalIndexScan(Scan scan) {
+ byte[] prefix = scan.getStartRow().length == 0 ? new byte[scan.getStopRow().length]: scan.getStartRow();
+ int prefixLength = scan.getStartRow().length == 0? scan.getStopRow().length: scan.getStartRow().length;
if(scan.getAttribute(SCAN_START_ROW_SUFFIX)!=null) {
scan.setStartRow(ScanRanges.prefixKey(scan.getAttribute(SCAN_START_ROW_SUFFIX), 0, prefix, prefixLength));
}