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;
}