diff --git a/hudi-client/src/main/java/org/apache/hudi/index/bloom/BucketizedBloomCheckPartitioner.java b/hudi-client/src/main/java/org/apache/hudi/index/bloom/BucketizedBloomCheckPartitioner.java index 798120cb2..36710dc02 100644 --- a/hudi-client/src/main/java/org/apache/hudi/index/bloom/BucketizedBloomCheckPartitioner.java +++ b/hudi-client/src/main/java/org/apache/hudi/index/bloom/BucketizedBloomCheckPartitioner.java @@ -145,7 +145,7 @@ public class BucketizedBloomCheckPartitioner extends Partitioner { final Pair parts = (Pair) key; final long hashOfKey = NumericUtils.getMessageDigestHash("MD5", parts.getRight()); final List candidatePartitions = fileGroupToPartitions.get(parts.getLeft()); - final int idx = (int) Math.floorMod(hashOfKey, candidatePartitions.size()); + final int idx = (int) Math.floorMod((int) hashOfKey, candidatePartitions.size()); assert idx >= 0; return candidatePartitions.get(idx); } diff --git a/hudi-client/src/test/java/org/apache/hudi/index/bloom/TestBucketizedBloomCheckPartitioner.java b/hudi-client/src/test/java/org/apache/hudi/index/bloom/TestBucketizedBloomCheckPartitioner.java index 29d039a34..3ad5a9953 100644 --- a/hudi-client/src/test/java/org/apache/hudi/index/bloom/TestBucketizedBloomCheckPartitioner.java +++ b/hudi-client/src/test/java/org/apache/hudi/index/bloom/TestBucketizedBloomCheckPartitioner.java @@ -30,6 +30,7 @@ import java.util.stream.IntStream; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; public class TestBucketizedBloomCheckPartitioner { @@ -79,4 +80,20 @@ public class TestBucketizedBloomCheckPartitioner { BucketizedBloomCheckPartitioner p = new BucketizedBloomCheckPartitioner(10000, comparisons1, 10); assertEquals("num partitions must equal total buckets", 100, p.numPartitions()); } + + @Test + public void testGetPartitions() { + Map comparisons1 = new HashMap() { + { + IntStream.range(0, 100000).forEach(f -> put("f" + f, 100L)); + } + }; + BucketizedBloomCheckPartitioner p = new BucketizedBloomCheckPartitioner(1000, comparisons1, 10); + + IntStream.range(0, 100000).forEach(f -> { + int partition = p.getPartition(Pair.of("f" + f, "value")); + assertTrue("partition is out of range: " + partition, 0 <= partition && partition <= 1000); + }); + } + }