[HUDI-742] Fix Java Math Exception (#1466)
This commit is contained in:
@@ -145,7 +145,7 @@ public class BucketizedBloomCheckPartitioner extends Partitioner {
|
|||||||
final Pair<String, String> parts = (Pair<String, String>) key;
|
final Pair<String, String> parts = (Pair<String, String>) key;
|
||||||
final long hashOfKey = NumericUtils.getMessageDigestHash("MD5", parts.getRight());
|
final long hashOfKey = NumericUtils.getMessageDigestHash("MD5", parts.getRight());
|
||||||
final List<Integer> candidatePartitions = fileGroupToPartitions.get(parts.getLeft());
|
final List<Integer> 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;
|
assert idx >= 0;
|
||||||
return candidatePartitions.get(idx);
|
return candidatePartitions.get(idx);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ import java.util.stream.IntStream;
|
|||||||
|
|
||||||
import static org.junit.Assert.assertArrayEquals;
|
import static org.junit.Assert.assertArrayEquals;
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
public class TestBucketizedBloomCheckPartitioner {
|
public class TestBucketizedBloomCheckPartitioner {
|
||||||
|
|
||||||
@@ -79,4 +80,20 @@ public class TestBucketizedBloomCheckPartitioner {
|
|||||||
BucketizedBloomCheckPartitioner p = new BucketizedBloomCheckPartitioner(10000, comparisons1, 10);
|
BucketizedBloomCheckPartitioner p = new BucketizedBloomCheckPartitioner(10000, comparisons1, 10);
|
||||||
assertEquals("num partitions must equal total buckets", 100, p.numPartitions());
|
assertEquals("num partitions must equal total buckets", 100, p.numPartitions());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGetPartitions() {
|
||||||
|
Map<String, Long> comparisons1 = new HashMap<String, Long>() {
|
||||||
|
{
|
||||||
|
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);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user