This is an automated email from the ASF dual-hosted git repository. sankarh pushed a commit to branch branch-3 in repository https://gitbox.apache.org/repos/asf/hive.git
The following commit(s) were added to refs/heads/branch-3 by this push: new 4e14f580c06 HIVE-27618: Backport of HIVE-25446: Wrong execption thrown if capacity<=0 4e14f580c06 is described below commit 4e14f580c06a7911bfb0847c11ee234404fb637b Author: Aman Raj <104416558+amanraj2...@users.noreply.github.com> AuthorDate: Tue Aug 22 13:10:55 2023 +0530 HIVE-27618: Backport of HIVE-25446: Wrong execption thrown if capacity<=0 Signed-off-by: Sankar Hariappan <sank...@apache.org> Closes (#4598) --- .../mapjoin/fast/VectorMapJoinFastHashTable.java | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/fast/VectorMapJoinFastHashTable.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/fast/VectorMapJoinFastHashTable.java index cbcc9b1ba52..572c686c497 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/fast/VectorMapJoinFastHashTable.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/mapjoin/fast/VectorMapJoinFastHashTable.java @@ -56,29 +56,33 @@ public abstract class VectorMapJoinFastHashTable implements VectorMapJoinHashTab } private static void validateCapacity(long capacity) { - if (Long.bitCount(capacity) != 1) { - throw new AssertionError("Capacity must be a power of two"); - } if (capacity <= 0) { throw new AssertionError("Invalid capacity " + capacity); } + if (Long.bitCount(capacity) != 1) { + throw new AssertionError("Capacity must be a power of two" + capacity); + } } private static int nextHighestPowerOfTwo(int v) { - return Integer.highestOneBit(v) << 1; + int value = Integer.highestOneBit(v); + if (Integer.highestOneBit(v) == HIGHEST_INT_POWER_OF_2) { + LOG.warn("Reached highest 2 power: {}", HIGHEST_INT_POWER_OF_2); + return value; + } + return value << 1; } public VectorMapJoinFastHashTable( int initialCapacity, float loadFactor, int writeBuffersSize, long estimatedKeyCount) { - initialCapacity = (Long.bitCount(initialCapacity) == 1) + this.logicalHashBucketCount = (Long.bitCount(initialCapacity) == 1) ? initialCapacity : nextHighestPowerOfTwo(initialCapacity); + LOG.info("Initial Capacity {} Recomputed Capacity {}", initialCapacity, logicalHashBucketCount); - validateCapacity(initialCapacity); + validateCapacity(logicalHashBucketCount); this.estimatedKeyCount = estimatedKeyCount; - - logicalHashBucketCount = initialCapacity; logicalHashBucketMask = logicalHashBucketCount - 1; resizeThreshold = (int)(logicalHashBucketCount * loadFactor);