Important
Declaration:
The paper published at PaPoC 2025 [2] represents a fraudulent work by Ege Berkay Gulcan and Burcu Kulahcioglu Ozkan, who have falsified my authorship and plagiarised material from my original research in 2024 [1]. Said publication bears no connection to myself or this code repository. Their misconduct has been concealed following the perfunctory handling of this matter by the TU Delft Research Integrity Committee (Dutch: Commissie Wetenschappelijke Integriteit).
Readers interested in this research are directed to my original thesis for authentic and accurate content.
Thank you for upholding academic integrity.
Junbo Xiong
[1]: Junbo Xiong. 2024. Conflict-Free Replicated Probabilistic Filter. Master's thesis. Delft University of Technology. https://resolver.tudelft.nl/uuid:5e06978e-a904-4740-a8a1-59c75fde75eb
[2]: Junbo Xiong, Ege Berkay Gulcan, and Burcu Kulahcioglu Ozkan. 2025. CRDTs for Approximate Membership Queries. In PaPoC@EuroSys. ACM, 56-62. https://doi.org/10.1145/3721473.3722146
probfilter is a Java / Scala library for conflict-free replicated probabilistic filters.
To add probfilter as dependency, using Maven for instance, include the following snippet:
<dependency>
<groupId>com.c6h5no2</groupId>
<artifactId>probfilter-core</artifactId>
<version>0.1.1</version>
</dependency>If you need to work with Akka Cluster, include also the adapters:
<dependency>
<groupId>com.c6h5no2</groupId>
<artifactId>probfilter-akka</artifactId>
<version>0.1.1</version>
</dependency>Substitute version if necessary.
probfilter provides the following filters implemented as state-based (aka convergent) CRDTs, coming with both immutable and mutable variants.
interface CvRFilter: convergent replicated filterclass GBloomFilter: grow-only replicated bloom filterclass GCuckooFilter: grow-only replicated cuckoo filterclass ORCuckooFilter: observed-remove replicated cuckoo filterclass ScGBloomFilter: scalable grow-only replicated bloom filterclass ScGCuckooFilter: scalable grow-only replicated cuckoo filterclass ScORCuckooFilter: scalable observed-remove replicated cuckoo filter
Besides, there are also two adapter classes for convenience.
class FluentCvRFilter: offering a fluent interfaceclass ReplicatedFilter: implementing Akka's ReplicatedData
int elem = 42;
var filter1 = new ORCuckooFilter.Immutable<>(strategy, (short) 1).asFluent();
var filter2 = new ORCuckooFilter.Immutable<>(strategy, (short) 2).asFluent();
filter1 = filter1.add(elem);
assert filter1.contains(elem);
filter2 = filter2.merge(filter1);
assert filter2.contains(elem);
filter2 = filter2.remove(elem);
assert !filter2.contains(elem);
filter1 = filter1.merge(filter2);
assert !filter1.contains(elem);@mastersthesis{xiong2024,
author={Xiong, Junbo},
title={Conflict-Free Replicated Probabilistic Filter},
school={Delft University of Technology},
year={2024},
url={https://resolver.tudelft.nl/uuid:5e06978e-a904-4740-a8a1-59c75fde75eb}
}