Fixed - RBloomFilter contains() and add() methods don't return accurate results if false probability is high. #5129

pull/5139/head
Nikita Koksharov 2 years ago
parent 3cf6f57ea4
commit a6a7848af5

@ -120,7 +120,7 @@ public class RedissonBloomFilter<T> extends RedissonExpirable implements RBloomF
try {
List<Boolean> result = (List<Boolean>) executorService.execute().getResponses();
for (Boolean val : result.subList(1, result.size()-1)) {
for (Boolean val : result.subList(1, result.size())) {
if (!val) {
return true;
}
@ -171,7 +171,7 @@ public class RedissonBloomFilter<T> extends RedissonExpirable implements RBloomF
try {
List<Boolean> result = (List<Boolean>) executorService.execute().getResponses();
for (Boolean val : result.subList(1, result.size()-1)) {
for (Boolean val : result.subList(1, result.size())) {
if (!val) {
return false;
}

@ -106,8 +106,14 @@ public class RedissonBloomFilterTest extends BaseTest {
@Test
public void test() {
RBloomFilter<String> filter = redisson.getBloomFilter("filter");
filter.tryInit(550000000L, 0.03);
filter.tryInit(550000000L, 0.5);
test(filter);
filter.delete();
assertThat(filter.tryInit(550000000L, 0.03)).isTrue();
test(filter);
}
private void test(RBloomFilter<String> filter) {
assertThat(filter.contains("123")).isFalse();
assertThat(filter.add("123")).isTrue();
assertThat(filter.contains("123")).isTrue();

Loading…
Cancel
Save