From a4d717ddc5ec8a8c22e3882105fadf17fa38590c Mon Sep 17 00:00:00 2001 From: Bilal Al Date: Mon, 16 Dec 2024 10:33:23 -0800 Subject: [PATCH 1/2] cleared bloom filter by deleting and recreating the object --- lib/splitclient-rb/cache/filter/bloom_filter.rb | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/lib/splitclient-rb/cache/filter/bloom_filter.rb b/lib/splitclient-rb/cache/filter/bloom_filter.rb index b06a94ab..70548566 100644 --- a/lib/splitclient-rb/cache/filter/bloom_filter.rb +++ b/lib/splitclient-rb/cache/filter/bloom_filter.rb @@ -8,8 +8,8 @@ module Filter class BloomFilter def initialize(capacity, false_positive_probability = 0.001) @capacity = capacity.round - m = best_m(capacity, false_positive_probability) - @ba = BitArray.new(m.round) + @m = best_m(capacity, false_positive_probability) + reset_filter @k = best_k(capacity) end @@ -17,22 +17,26 @@ def add(string) return false if contains?(string) positions = hashes(string) - positions.each { |position| @ba[position] = 1 } true end - + def contains?(string) !hashes(string).any? { |ea| @ba[ea] == 0 } end def clear - @ba.size.times { |i| @ba[i] = 0 } + @ba.delete() + reset_filter end - + private + def reset_filter + @ba = BitArray.new(@m.round) + end + # m is the required number of bits in the array def best_m(capacity, false_positive_probability) -(capacity * Math.log(false_positive_probability)) / (Math.log(2) ** 2) From eb7509bf2a8477d936c9d21cadf9f728510b0802 Mon Sep 17 00:00:00 2001 From: Bilal Al Date: Mon, 16 Dec 2024 10:50:33 -0800 Subject: [PATCH 2/2] setting object to nil instead --- lib/splitclient-rb/cache/filter/bloom_filter.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/splitclient-rb/cache/filter/bloom_filter.rb b/lib/splitclient-rb/cache/filter/bloom_filter.rb index 70548566..aa602807 100644 --- a/lib/splitclient-rb/cache/filter/bloom_filter.rb +++ b/lib/splitclient-rb/cache/filter/bloom_filter.rb @@ -27,7 +27,7 @@ def contains?(string) end def clear - @ba.delete() + @ba = nil reset_filter end