From 49e0303fa3b85d687cd8c041eafa2a0a71282d49 Mon Sep 17 00:00:00 2001 From: Nikita Date: Fri, 23 Dec 2016 12:09:05 +0300 Subject: [PATCH] Added restrictions for RBloomFilter parameters during tryInit invocation. #739 --- .../java/org/redisson/RedissonBloomFilter.java | 13 +++++++++++-- .../org/redisson/RedissonBloomFilterTest.java | 18 ++++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/redisson/src/main/java/org/redisson/RedissonBloomFilter.java b/redisson/src/main/java/org/redisson/RedissonBloomFilter.java index 88cbf8daa..0818a0d92 100644 --- a/redisson/src/main/java/org/redisson/RedissonBloomFilter.java +++ b/redisson/src/main/java/org/redisson/RedissonBloomFilter.java @@ -35,7 +35,6 @@ import org.redisson.client.protocol.decoder.ObjectMapReplayDecoder; import org.redisson.command.CommandBatchService; import org.redisson.command.CommandExecutor; -import io.netty.util.concurrent.Future; import net.openhft.hashing.LongHashFunction; /** @@ -212,9 +211,19 @@ public class RedissonBloomFilter extends RedissonExpirable implements RBloomF @Override public boolean tryInit(long expectedInsertions, double falseProbability) { + if (falseProbability > 1) { + throw new IllegalArgumentException("Bloom filter false probability can't be greater than 1"); + } + if (falseProbability < 0) { + throw new IllegalArgumentException("Bloom filter false probability can't be negative"); + } + size = optimalNumOfBits(expectedInsertions, falseProbability); + if (size == 0) { + throw new IllegalArgumentException("Bloom filter calculated size is " + size); + } if (size > MAX_SIZE) { - throw new IllegalArgumentException("Bloom filter can't be greater than " + MAX_SIZE + ". But calculated size is " + size); + throw new IllegalArgumentException("Bloom filter size can't be greater than " + MAX_SIZE + ". But calculated size is " + size); } hashIterations = optimalNumOfHashFunctions(expectedInsertions, size); diff --git a/redisson/src/test/java/org/redisson/RedissonBloomFilterTest.java b/redisson/src/test/java/org/redisson/RedissonBloomFilterTest.java index 61f9addc9..3491d495e 100644 --- a/redisson/src/test/java/org/redisson/RedissonBloomFilterTest.java +++ b/redisson/src/test/java/org/redisson/RedissonBloomFilterTest.java @@ -7,6 +7,24 @@ import static org.assertj.core.api.Assertions.*; public class RedissonBloomFilterTest extends BaseTest { + @Test(expected = IllegalArgumentException.class) + public void testFalseProbability1() { + RBloomFilter filter = redisson.getBloomFilter("filter"); + filter.tryInit(1, -1); + } + + @Test(expected = IllegalArgumentException.class) + public void testFalseProbability2() { + RBloomFilter filter = redisson.getBloomFilter("filter"); + filter.tryInit(1, 2); + } + + @Test(expected = IllegalArgumentException.class) + public void testSizeZero() { + RBloomFilter filter = redisson.getBloomFilter("filter"); + filter.tryInit(1, 1); + } + @Test public void testConfig() { RBloomFilter filter = redisson.getBloomFilter("filter");