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

Reply via email to