diff --git a/table/block_based/filter_policy.cc b/table/block_based/filter_policy.cc index a2a0728b9..ae5da2d7b 100644 --- a/table/block_based/filter_policy.cc +++ b/table/block_based/filter_policy.cc @@ -97,6 +97,10 @@ class XXPH3FilterBitsBuilder : public BuiltinFilterBitsBuilder { // For delegating between XXPH3FilterBitsBuilders void SwapEntriesWith(XXPH3FilterBitsBuilder* other) { std::swap(hash_entries_, other->hash_entries_); + if (cache_res_mgr_) { + std::swap(hash_entry_cache_res_bucket_handles_, + other->hash_entry_cache_res_bucket_handles_); + } } virtual size_t RoundDownUsableSpace(size_t available_size) = 0; diff --git a/util/bloom_test.cc b/util/bloom_test.cc index 4cb774fb0..8c3466219 100644 --- a/util/bloom_test.cc +++ b/util/bloom_test.cc @@ -644,6 +644,18 @@ TEST(FullBloomFilterConstructionReserveMemTest, } else { EXPECT_EQ(filter.data()[filter.size() - 5], static_cast(-2)); } + + if (reserve_builder_mem) { + const size_t dummy_entry_num = static_cast(std::ceil( + filter.size() * 1.0 / CacheReservationManager::GetDummyEntrySize())); + EXPECT_GE(cache->GetPinnedUsage(), + dummy_entry_num * CacheReservationManager::GetDummyEntrySize()); + EXPECT_LT( + cache->GetPinnedUsage(), + (dummy_entry_num + 1) * CacheReservationManager::GetDummyEntrySize()); + } else { + EXPECT_EQ(cache->GetPinnedUsage(), 0); + } } }