Repository: kudu Updated Branches: refs/heads/master df3d070e5 -> d911b304d
KUDU-1157. Don't use array reference equality for EMPTY_ARRAY It seems like the only way that the user can specify these byte[] bounds is some deprecated 'raw bounds' APIs. So, this isn't likely a fix for any real bugs. However, it's quite bad form to compare reference equality on arrays. Change-Id: I30163098926822aafbf23b03ba4c9e26a7c91349 Reviewed-on: http://gerrit.cloudera.org:8080/4101 Tested-by: Kudu Jenkins Reviewed-by: Dan Burkert <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/kudu/repo Commit: http://git-wip-us.apache.org/repos/asf/kudu/commit/d911b304 Tree: http://git-wip-us.apache.org/repos/asf/kudu/tree/d911b304 Diff: http://git-wip-us.apache.org/repos/asf/kudu/diff/d911b304 Branch: refs/heads/master Commit: d911b304d7f4e2c345a01d4e6a7637cf71835a4a Parents: df3d070 Author: Todd Lipcon <[email protected]> Authored: Tue Aug 23 15:53:51 2016 -0700 Committer: Todd Lipcon <[email protected]> Committed: Wed Aug 24 19:17:04 2016 +0000 ---------------------------------------------------------------------- .../kudu/client/AbstractKuduScannerBuilder.java | 4 ++-- .../java/org/apache/kudu/client/AsyncKuduScanner.java | 14 ++++++-------- .../java/org/apache/kudu/client/KuduScanToken.java | 14 ++++++-------- 3 files changed, 14 insertions(+), 18 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kudu/blob/d911b304/java/kudu-client/src/main/java/org/apache/kudu/client/AbstractKuduScannerBuilder.java ---------------------------------------------------------------------- diff --git a/java/kudu-client/src/main/java/org/apache/kudu/client/AbstractKuduScannerBuilder.java b/java/kudu-client/src/main/java/org/apache/kudu/client/AbstractKuduScannerBuilder.java index 47a391a..9b648c3 100644 --- a/java/kudu-client/src/main/java/org/apache/kudu/client/AbstractKuduScannerBuilder.java +++ b/java/kudu-client/src/main/java/org/apache/kudu/client/AbstractKuduScannerBuilder.java @@ -274,7 +274,7 @@ public abstract class AbstractKuduScannerBuilder */ @Deprecated public S lowerBoundRaw(byte[] startPrimaryKey) { - if (lowerBoundPrimaryKey == AsyncKuduClient.EMPTY_ARRAY || + if (lowerBoundPrimaryKey.length == 0 || Bytes.memcmp(startPrimaryKey, lowerBoundPrimaryKey) > 0) { this.lowerBoundPrimaryKey = startPrimaryKey; } @@ -299,7 +299,7 @@ public abstract class AbstractKuduScannerBuilder */ @Deprecated public S exclusiveUpperBoundRaw(byte[] endPrimaryKey) { - if (upperBoundPrimaryKey == AsyncKuduClient.EMPTY_ARRAY || + if (upperBoundPrimaryKey.length == 0 || Bytes.memcmp(endPrimaryKey, upperBoundPrimaryKey) < 0) { this.upperBoundPrimaryKey = endPrimaryKey; } http://git-wip-us.apache.org/repos/asf/kudu/blob/d911b304/java/kudu-client/src/main/java/org/apache/kudu/client/AsyncKuduScanner.java ---------------------------------------------------------------------- diff --git a/java/kudu-client/src/main/java/org/apache/kudu/client/AsyncKuduScanner.java b/java/kudu-client/src/main/java/org/apache/kudu/client/AsyncKuduScanner.java index b80e765..20cf9f2 100644 --- a/java/kudu-client/src/main/java/org/apache/kudu/client/AsyncKuduScanner.java +++ b/java/kudu-client/src/main/java/org/apache/kudu/client/AsyncKuduScanner.java @@ -268,8 +268,8 @@ public final class AsyncKuduScanner { this.batchSizeBytes = batchSizeBytes; if (!table.getPartitionSchema().isSimpleRangePartitioning() && - (startPrimaryKey != AsyncKuduClient.EMPTY_ARRAY || - endPrimaryKey != AsyncKuduClient.EMPTY_ARRAY) && + (startPrimaryKey.length != 0 || + endPrimaryKey.length != 0) && PARTITION_PRUNE_WARN.getAndSet(false)) { LOG.warn("Starting full table scan. " + "In the future this scan may be automatically optimized with partition pruning."); @@ -458,7 +458,7 @@ public final class AsyncKuduScanner { // Stop scanning if the non-covered range is past the end partition key. if (ncre.getNonCoveredRangeEnd().length == 0 - || (endPartitionKey != AsyncKuduClient.EMPTY_ARRAY + || (endPartitionKey.length != 0 && Bytes.memcmp(endPartitionKey, ncre.getNonCoveredRangeEnd()) <= 0)) { hasMore = false; closed = true; // the scanner is closed on the other side at this point @@ -550,7 +550,7 @@ public final class AsyncKuduScanner { Partition partition = tablet.getPartition(); // Stop scanning if we have scanned until or past the end partition key. if (partition.isEndPartition() - || (this.endPartitionKey != AsyncKuduClient.EMPTY_ARRAY + || (this.endPartitionKey.length != 0 && Bytes.memcmp(this.endPartitionKey, partition.getPartitionKeyEnd()) <= 0)) { hasMore = false; closed = true; // the scanner is closed on the other side at this point @@ -778,13 +778,11 @@ public final class AsyncKuduScanner { newBuilder.setSnapTimestamp(AsyncKuduScanner.this.getSnapshotTimestamp()); } - if (AsyncKuduScanner.this.startPrimaryKey != AsyncKuduClient.EMPTY_ARRAY && - AsyncKuduScanner.this.startPrimaryKey.length > 0) { + if (AsyncKuduScanner.this.startPrimaryKey.length > 0) { newBuilder.setStartPrimaryKey(ZeroCopyLiteralByteString.copyFrom(startPrimaryKey)); } - if (AsyncKuduScanner.this.endPrimaryKey != AsyncKuduClient.EMPTY_ARRAY && - AsyncKuduScanner.this.endPrimaryKey.length > 0) { + if (AsyncKuduScanner.this.endPrimaryKey.length > 0) { newBuilder.setStopPrimaryKey(ZeroCopyLiteralByteString.copyFrom(endPrimaryKey)); } http://git-wip-us.apache.org/repos/asf/kudu/blob/d911b304/java/kudu-client/src/main/java/org/apache/kudu/client/KuduScanToken.java ---------------------------------------------------------------------- diff --git a/java/kudu-client/src/main/java/org/apache/kudu/client/KuduScanToken.java b/java/kudu-client/src/main/java/org/apache/kudu/client/KuduScanToken.java index cfecb67..6b121b2 100644 --- a/java/kudu-client/src/main/java/org/apache/kudu/client/KuduScanToken.java +++ b/java/kudu-client/src/main/java/org/apache/kudu/client/KuduScanToken.java @@ -213,8 +213,8 @@ public class KuduScanToken implements Comparable<KuduScanToken> { @Override public List<KuduScanToken> build() { - if (lowerBoundPartitionKey != AsyncKuduClient.EMPTY_ARRAY || - upperBoundPartitionKey != AsyncKuduClient.EMPTY_ARRAY) { + if (lowerBoundPartitionKey.length != 0 || + upperBoundPartitionKey.length != 0) { throw new IllegalArgumentException( "Partition key bounds may not be set on KuduScanTokenBuilder"); } @@ -254,18 +254,16 @@ public class KuduScanToken implements Comparable<KuduScanToken> { proto.addColumnPredicates(predicate.toPB()); } - if (lowerBoundPrimaryKey != AsyncKuduClient.EMPTY_ARRAY && lowerBoundPrimaryKey.length > 0) { + if (lowerBoundPrimaryKey.length > 0) { proto.setLowerBoundPrimaryKey(ZeroCopyLiteralByteString.copyFrom(lowerBoundPrimaryKey)); } - if (upperBoundPrimaryKey != AsyncKuduClient.EMPTY_ARRAY && upperBoundPrimaryKey.length > 0) { + if (upperBoundPrimaryKey.length > 0) { proto.setUpperBoundPrimaryKey(ZeroCopyLiteralByteString.copyFrom(upperBoundPrimaryKey)); } - if (lowerBoundPartitionKey != AsyncKuduClient.EMPTY_ARRAY && - lowerBoundPartitionKey.length > 0) { + if (lowerBoundPartitionKey.length > 0) { proto.setLowerBoundPartitionKey(ZeroCopyLiteralByteString.copyFrom(lowerBoundPartitionKey)); } - if (upperBoundPartitionKey != AsyncKuduClient.EMPTY_ARRAY && - upperBoundPartitionKey.length > 0) { + if (upperBoundPartitionKey.length > 0) { proto.setUpperBoundPartitionKey(ZeroCopyLiteralByteString.copyFrom(upperBoundPartitionKey)); }
