You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by sa...@apache.org on 2016/08/05 21:03:20 UTC

[21/50] [abbrv] phoenix git commit: PHOENIX-2900 Unable to find hash cache once a salted table 's first region has split

PHOENIX-2900 Unable to find hash cache once a salted table 's first region has split


Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/5369c3d7
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/5369c3d7
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/5369c3d7

Branch: refs/heads/encodecolumns
Commit: 5369c3d781762e177217bd24a30cf2e9b7fb9bdd
Parents: 0b39a52
Author: James Taylor <ja...@apache.org>
Authored: Sun Jul 24 09:30:31 2016 -0700
Committer: James Taylor <ja...@apache.org>
Committed: Sun Jul 24 09:57:37 2016 -0700

----------------------------------------------------------------------
 .../org/apache/phoenix/compile/ScanRanges.java  |  5 ++-
 .../phoenix/compile/QueryCompilerTest.java      | 42 ++++++++++++++++++++
 .../phoenix/compile/SaltedScanRangesTest.java   |  8 ++++
 3 files changed, 54 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/phoenix/blob/5369c3d7/phoenix-core/src/main/java/org/apache/phoenix/compile/ScanRanges.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/compile/ScanRanges.java b/phoenix-core/src/main/java/org/apache/phoenix/compile/ScanRanges.java
index f3d5bba..95eee60 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/compile/ScanRanges.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/compile/ScanRanges.java
@@ -419,7 +419,10 @@ public class ScanRanges {
             return true;
         }
         
-        return intersectScan(null, regionStartKey, regionEndKey, 0, false) == HAS_INTERSECTION;
+        boolean crossesSaltBoundary = isSalted && ScanUtil.crossesPrefixBoundary(regionEndKey,
+                ScanUtil.getPrefix(regionStartKey, SaltingUtil.NUM_SALTING_BYTES), 
+                SaltingUtil.NUM_SALTING_BYTES);        
+        return intersectScan(null, regionStartKey, regionEndKey, 0, crossesSaltBoundary) == HAS_INTERSECTION;
     }
     
     public SkipScanFilter getSkipScanFilter() {

http://git-wip-us.apache.org/repos/asf/phoenix/blob/5369c3d7/phoenix-core/src/test/java/org/apache/phoenix/compile/QueryCompilerTest.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/test/java/org/apache/phoenix/compile/QueryCompilerTest.java b/phoenix-core/src/test/java/org/apache/phoenix/compile/QueryCompilerTest.java
index 7aab048..c91b855 100644
--- a/phoenix-core/src/test/java/org/apache/phoenix/compile/QueryCompilerTest.java
+++ b/phoenix-core/src/test/java/org/apache/phoenix/compile/QueryCompilerTest.java
@@ -41,6 +41,7 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Properties;
 
+import org.apache.hadoop.hbase.HRegionLocation;
 import org.apache.hadoop.hbase.client.Scan;
 import org.apache.hadoop.hbase.filter.Filter;
 import org.apache.hadoop.hbase.filter.FirstKeyOnlyFilter;
@@ -48,6 +49,7 @@ import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.phoenix.compile.OrderByCompiler.OrderBy;
 import org.apache.phoenix.coprocessor.BaseScannerRegionObserver;
 import org.apache.phoenix.exception.SQLExceptionCode;
+import org.apache.phoenix.execute.HashJoinPlan;
 import org.apache.phoenix.expression.Expression;
 import org.apache.phoenix.expression.LiteralExpression;
 import org.apache.phoenix.expression.aggregator.Aggregator;
@@ -2385,4 +2387,44 @@ public class QueryCompilerTest extends BaseConnectionlessQueryTest {
             conn.close();
         }
     }
+    
+    @Test
+    public void testSaltTableJoin() throws Exception{
+
+        PhoenixConnection conn = (PhoenixConnection)DriverManager.getConnection(getUrl());
+        try {
+            conn.createStatement().execute("drop table if exists SALT_TEST2900");
+
+            conn.createStatement().execute(
+                "create table SALT_TEST2900"+
+                        "("+
+                        "id UNSIGNED_INT not null primary key,"+
+                        "appId VARCHAR"+
+                    ")SALT_BUCKETS=2");
+
+
+
+            conn.createStatement().execute("drop table if exists RIGHT_TEST2900 ");
+            conn.createStatement().execute(
+                "create table RIGHT_TEST2900"+
+                        "("+
+                        "appId VARCHAR not null primary key,"+
+                        "createTime VARCHAR"+
+                    ")");
+
+            
+            String sql="select * from SALT_TEST2900 a inner join RIGHT_TEST2900 b on a.appId=b.appId where a.id>=3 and a.id<=5";
+            HashJoinPlan plan = (HashJoinPlan)getQueryPlan(sql, Collections.emptyList());
+            ScanRanges ranges=plan.getContext().getScanRanges();
+
+            List<HRegionLocation> regionLocations=
+                    conn.getQueryServices().getAllTableRegions(Bytes.toBytes("SALT_TEST2900"));
+            for (HRegionLocation regionLocation : regionLocations) {
+                assertTrue(ranges.intersectRegion(regionLocation.getRegionInfo().getStartKey(),
+                    regionLocation.getRegionInfo().getEndKey(), false));
+            }
+        } finally {
+            conn.close();
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/phoenix/blob/5369c3d7/phoenix-core/src/test/java/org/apache/phoenix/compile/SaltedScanRangesTest.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/test/java/org/apache/phoenix/compile/SaltedScanRangesTest.java b/phoenix-core/src/test/java/org/apache/phoenix/compile/SaltedScanRangesTest.java
index f8eb3a0..d89f024 100644
--- a/phoenix-core/src/test/java/org/apache/phoenix/compile/SaltedScanRangesTest.java
+++ b/phoenix-core/src/test/java/org/apache/phoenix/compile/SaltedScanRangesTest.java
@@ -151,6 +151,14 @@ public class SaltedScanRangesTest {
                     KeyRange.getKeyRange(ByteUtil.concat(new byte[]{1}, Bytes.toBytes("f")), ByteUtil.concat(new byte[]{1}, Bytes.toBytes("g"))),
                     true,
                     false));
+        testCases.addAll(
+                foreach(new KeyRange[][]{{
+                        PVarchar.INSTANCE.getKeyRange(Bytes.toBytes("c"), true, KeyRange.UNBOUND, false),
+                    }},
+                    new int[] {1},
+                    KeyRange.getKeyRange(new byte[]{1,0},new byte[]{2,0}),
+                    false,
+                    true));
         return testCases;
     }