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:44 UTC

[1/5] phoenix git commit: PHOENIX-4576 Correct local index wrongly using child region scanners

Repository: phoenix
Updated Branches:
  refs/heads/4.x-HBase-0.98 d92434365 -> 9e936094c
  refs/heads/4.x-HBase-1.1 eba095001 -> df1f8ca8d
  refs/heads/4.x-HBase-1.2 9f3bbd97a -> 687d04cb5
  refs/heads/4.x-HBase-1.3 af4b81768 -> ee948f0f1
  refs/heads/master 1099a0a1d -> 204d4aa08


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/204d4aa0
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/204d4aa0
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/204d4aa0

Branch: refs/heads/master
Commit: 204d4aa08193a9ed845742d8923b323faf6f4f0e
Parents: 1099a0a
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 12:32:08 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/204d4aa0/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 21a075c..86a3fe1 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
@@ -361,6 +361,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/204d4aa0/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 f44ecfa..4a2c465 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
@@ -180,7 +180,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/204d4aa0/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));
         }


[4/5] phoenix git commit: PHOENIX-4576 Correct local index wrongly using child region scanners

Posted by el...@apache.org.
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/df1f8ca8
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/df1f8ca8
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/df1f8ca8

Branch: refs/heads/4.x-HBase-1.1
Commit: df1f8ca8d46e385d9420141ac8394848ef3567a5
Parents: eba0950
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:01:50 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/df1f8ca8/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 140b0ba..12fa47a 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
@@ -361,6 +361,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/df1f8ca8/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 7f9b7f4..9133283 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/df1f8ca8/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));
         }


[3/5] phoenix git commit: PHOENIX-4576 Correct local index wrongly using child region scanners

Posted by el...@apache.org.
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/687d04cb
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/687d04cb
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/687d04cb

Branch: refs/heads/4.x-HBase-1.2
Commit: 687d04cb5cc9c1c811077bfdcff20f137f5c1d6f
Parents: 9f3bbd9
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 12:49:59 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/687d04cb/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 140b0ba..12fa47a 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
@@ -361,6 +361,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/687d04cb/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 9f55ca5..7ef64b0 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/687d04cb/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));
         }


[5/5] phoenix git commit: PHOENIX-4576 Correct local index wrongly using child region scanners

Posted by el...@apache.org.
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));
         }


[2/5] phoenix git commit: PHOENIX-4576 Correct local index wrongly using child region scanners

Posted by el...@apache.org.
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/ee948f0f
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/ee948f0f
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/ee948f0f

Branch: refs/heads/4.x-HBase-1.3
Commit: ee948f0f1aab4d9d965ebd9f8fc3100789379b6a
Parents: af4b817
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 12:38:58 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/ee948f0f/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 140b0ba..12fa47a 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
@@ -361,6 +361,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/ee948f0f/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 f44ecfa..4a2c465 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
@@ -180,7 +180,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/ee948f0f/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));
         }