PHOENIX-1251 Salted queries with range scan become full table scans
Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/5f6f80b8 Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/5f6f80b8 Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/5f6f80b8 Branch: refs/heads/3.0 Commit: 5f6f80b83b07609e4990eded142ff9b6f09393a5 Parents: 88c6abb Author: James Taylor <[email protected]> Authored: Fri Oct 3 20:55:50 2014 -0700 Committer: James Taylor <[email protected]> Committed: Fri Oct 3 20:55:50 2014 -0700 ---------------------------------------------------------------------- .../java/org/apache/phoenix/compile/ScanRanges.java | 6 ++++++ .../phoenix/coprocessor/MetaDataEndpointImpl.java | 6 +++--- .../org/apache/phoenix/iterate/ParallelIterators.java | 2 +- .../org/apache/phoenix/schema/MetaDataClient.java | 14 +++++++------- pom.xml | 2 +- 5 files changed, 18 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/phoenix/blob/5f6f80b8/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 1bd8cef..533d752 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 @@ -210,6 +210,9 @@ public class ScanRanges { public Scan intersectScan(Scan scan, final byte[] originalStartKey, final byte[] originalStopKey, final int keyOffset) { byte[] startKey = originalStartKey; byte[] stopKey = originalStopKey; + if (stopKey.length > 0 && Bytes.compareTo(startKey, stopKey) >= 0) { + return null; + } boolean mayHaveRows = false; // Keep the keys as they are if we have a point lookup, as we've already resolved the // salt bytes in that case. @@ -338,6 +341,9 @@ public class ScanRanges { scanStopKey = prefixKey(scanStopKey, scanKeyOffset, prefixBytes, keyOffset); } } + if (scanStopKey.length > 0 && Bytes.compareTo(scanStartKey, scanStopKey) >= 0) { + return null; + } newScan.setStartRow(scanStartKey); newScan.setStopRow(scanStopKey); http://git-wip-us.apache.org/repos/asf/phoenix/blob/5f6f80b8/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java index f1f05be..17e5e15 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java @@ -482,10 +482,10 @@ public class MetaDataEndpointImpl extends BaseEndpointCoprocessor implements Met KeyValue current = result.raw()[0]; int tableNameLength = tableNameBytes.length + 1; int cfOffset = current.getRowOffset() + tableNameLength; - int cfLength = getVarCharLength(current.getRow(), cfOffset, current.getRowLength() - tableNameLength); - ptr.set(current.getRow(), cfOffset, cfLength); + int cfLength = getVarCharLength(current.getBuffer(), cfOffset, current.getRowLength() - tableNameLength); + ptr.set(current.getBuffer(), cfOffset, cfLength); byte[] cfName = ByteUtil.copyKeyBytesIfNecessary(ptr); - PhoenixArray array = (PhoenixArray)PDataType.VARBINARY_ARRAY.toObject(current.getValue(), current.getValueOffset(), current + PhoenixArray array = (PhoenixArray)PDataType.VARBINARY_ARRAY.toObject(current.getBuffer(), current.getValueOffset(), current .getValueLength()); if (array != null && array.getDimensions() != 0) { List<byte[]> guidePosts = Lists.newArrayListWithExpectedSize(array.getDimensions()); http://git-wip-us.apache.org/repos/asf/phoenix/blob/5f6f80b8/phoenix-core/src/main/java/org/apache/phoenix/iterate/ParallelIterators.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/iterate/ParallelIterators.java b/phoenix-core/src/main/java/org/apache/phoenix/iterate/ParallelIterators.java index da8c212..81dfbb6 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/iterate/ParallelIterators.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/iterate/ParallelIterators.java @@ -332,7 +332,7 @@ public class ParallelIterators extends ExplainTable implements ResultIterators { for (int i = 0; i < gps.size(); i++) { buf.append(Bytes.toStringBinary(gps.get(i))); buf.append(","); - if (i < gps.size()-1 && (i % 10) == 0) { + if (i+1 < gps.size() && ((i+1) % 10) == 0) { buf.append("\n"); } } http://git-wip-us.apache.org/repos/asf/phoenix/blob/5f6f80b8/phoenix-core/src/main/java/org/apache/phoenix/schema/MetaDataClient.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/schema/MetaDataClient.java b/phoenix-core/src/main/java/org/apache/phoenix/schema/MetaDataClient.java index 76f1b2a..79eaea0 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/schema/MetaDataClient.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/schema/MetaDataClient.java @@ -1448,14 +1448,14 @@ public class MetaDataClient { tableRefs.add(new TableRef(null, viewIndexTable, ts, false)); } } + // Delete everything in the column. You'll still be able to do queries at earlier timestamps + tableRefs.add(new TableRef(null, table, ts, false)); + // TODO: Let the standard mutable secondary index maintenance handle this? + for (PTable index: table.getIndexes()) { + tableRefs.add(new TableRef(null, index, ts, false)); + } + deleteFromStatsTable(tableRefs, ts); if (!dropMetaData) { - // Delete everything in the column. You'll still be able to do queries at earlier timestamps - tableRefs.add(new TableRef(null, table, ts, false)); - // TODO: Let the standard mutable secondary index maintenance handle this? - for (PTable index: table.getIndexes()) { - tableRefs.add(new TableRef(null, index, ts, false)); - } - deleteFromStatsTable(tableRefs, ts); MutationPlan plan = new PostDDLCompiler(connection).compile(tableRefs, null, null, Collections.<PColumn>emptyList(), ts); return connection.getQueryServices().updateData(plan); } http://git-wip-us.apache.org/repos/asf/phoenix/blob/5f6f80b8/pom.xml ---------------------------------------------------------------------- diff --git a/pom.xml b/pom.xml index 9ff65d0..bd9e9c2 100644 --- a/pom.xml +++ b/pom.xml @@ -247,7 +247,7 @@ <encoding>UTF-8</encoding> <forkCount>${numForkedIT}</forkCount> <reuseForks>true</reuseForks> - <argLine>-enableassertions -Xmx2000m -XX:MaxPermSize=128m -Djava.security.egd=file:/dev/./urandom</argLine> + <argLine>-enableassertions -Xmx2500m -XX:MaxPermSize=128m -Djava.security.egd=file:/dev/./urandom</argLine> <redirectTestOutputToFile>${test.output.tofile}</redirectTestOutputToFile> <testSourceDirectory>${basedir}/src/it/java</testSourceDirectory> <groups>org.apache.phoenix.end2end.HBaseManagedTimeTest</groups>
