diff --git a/Cargo.toml b/Cargo.toml index f29cf11..d205dbc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,7 +15,7 @@ homepage = "https://github.com/valkey-io/valkey-bloom" valkey-module = "0.1.2" valkey-module-macros = "0" linkme = "0" -bloomfilter = { version = "3", features = ["serde"] } +bloomfilter = { version = "3.0.1", features = ["serde"] } lazy_static = "1.4.0" libc = "0.2" serde = { version = "1.0", features = ["derive"] } diff --git a/src/bloom/data_type.rs b/src/bloom/data_type.rs index 9fa86cd..1d23791 100644 --- a/src/bloom/data_type.rs +++ b/src/bloom/data_type.rs @@ -80,17 +80,6 @@ impl ValkeyDataType for BloomFilterType { let Ok(bitmap) = raw::load_string_buffer(rdb) else { return None; }; - let Ok(number_of_bits) = raw::load_unsigned(rdb) else { - return None; - }; - // Reject RDB Load if any bloom filter within a bloom object of a size greater than what is allowed. - if !BloomFilter::validate_size_with_bits(number_of_bits) { - logging::log_warning("Failed to restore bloom object because it contains a filter larger than the max allowed size limit."); - return None; - } - let Ok(number_of_hash_functions) = raw::load_unsigned(rdb) else { - return None; - }; let Ok(capacity) = raw::load_unsigned(rdb) else { return None; }; @@ -103,12 +92,12 @@ impl ValkeyDataType for BloomFilterType { } else { capacity }; - let sip_keys = [ - (FIXED_SIP_KEY_ONE_A, FIXED_SIP_KEY_ONE_B), - (FIXED_SIP_KEY_TWO_A, FIXED_SIP_KEY_TWO_B), - ]; let filter = BloomFilter::from_existing(bitmap.as_ref(), num_items as u32, capacity as u32); + if !BloomFilter::validate_size_with_bits(filter.bloom.len()) { + logging::log_warning("Failed to restore bloom object because it contains a filter larger than the max allowed size limit."); + return None; + } filters.push(filter); } BLOOM_OBJECT_TOTAL_MEMORY_BYTES.fetch_add( @@ -129,11 +118,7 @@ impl ValkeyDataType for BloomFilterType { dig.add_long_long(self.expansion.into()); dig.add_string_buffer(&self.fp_rate.to_le_bytes()); for filter in &self.filters { - dig.add_string_buffer(&filter.bloom.bitmap()); - for &(key1, key2) in &filter.sip_keys() { - dig.add_long_long(key1 as i64); - dig.add_long_long(key2 as i64); - } + dig.add_string_buffer(filter.bloom.as_slice()); dig.add_long_long(filter.num_items.into()); dig.add_long_long(filter.capacity.into()); } diff --git a/src/bloom/utils.rs b/src/bloom/utils.rs index a8a4401..3e3a00a 100644 --- a/src/bloom/utils.rs +++ b/src/bloom/utils.rs @@ -402,10 +402,6 @@ impl BloomFilter { self.bloom.set(item) } - pub fn sip_keys(&self) -> [(u64, u64); 2] { - self.bloom.sip_keys() - } - /// Create a new BloomFilter from an existing BloomFilter object (COPY command). pub fn create_copy_from(bf: &BloomFilter) -> BloomFilter { BloomFilter::from_existing(&bf.bloom.to_bytes(), bf.num_items, bf.capacity) diff --git a/src/wrapper/bloom_callback.rs b/src/wrapper/bloom_callback.rs index 73164e7..da9e21d 100644 --- a/src/wrapper/bloom_callback.rs +++ b/src/wrapper/bloom_callback.rs @@ -31,8 +31,6 @@ pub unsafe extern "C" fn bloom_rdb_save(rdb: *mut raw::RedisModuleIO, value: *mu bitmap.as_ptr().cast::(), bitmap.len(), ); - raw::save_unsigned(rdb, bloom.len()); - raw::save_unsigned(rdb, bloom.number_of_hash_functions() as u64); raw::save_unsigned(rdb, filter.capacity as u64); if filter_list_iter.peek().is_none() { raw::save_unsigned(rdb, filter.num_items as u64);