From 1bd658447852bdbca20bd7fe425c6e800a5db2ee Mon Sep 17 00:00:00 2001 From: Lakshmi Narayanan Sreethar Date: Wed, 3 Apr 2024 18:11:27 +0530 Subject: [PATCH] sstables_manager: add new intrusive set to track the reclaimed sstables The new set holds the sstables from where the memory has been reclaimed and is sorted in ascending order of the total memory reclaimed. Signed-off-by: Lakshmi Narayanan Sreethar (cherry picked from commit 2340ab63c6b9a7598078ae8b0615c37c3e7f1c07) --- sstables/sstables_manager.cc | 2 ++ sstables/sstables_manager.hh | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/sstables/sstables_manager.cc b/sstables/sstables_manager.cc index 3ca1e1be50..45ac4ee7f2 100644 --- a/sstables/sstables_manager.cc +++ b/sstables/sstables_manager.cc @@ -87,6 +87,7 @@ void sstables_manager::increment_total_reclaimable_memory_and_maybe_reclaim(ssta auto memory_reclaimed = sst_with_max_memory->reclaim_memory_from_components(); _total_memory_reclaimed += memory_reclaimed; _total_reclaimable_memory -= memory_reclaimed; + _reclaimed.insert(*sst_with_max_memory); smlogger.info("Reclaimed {} bytes of memory from SSTable components. Total memory reclaimed so far is {} bytes", memory_reclaimed, _total_memory_reclaimed); } @@ -98,6 +99,7 @@ void sstables_manager::deactivate(sstable* sst) { // Remove SSTable from the reclaimable memory tracking _total_reclaimable_memory -= sst->total_reclaimable_memory_size(); _total_memory_reclaimed -= sst->total_memory_reclaimed(); + _reclaimed.erase(*sst); // At this point, sst has a reference count of zero, since we got here from // lw_shared_ptr_deleter::dispose(). diff --git a/sstables/sstables_manager.hh b/sstables/sstables_manager.hh index 0f7b5d4240..07ee4c4dfc 100644 --- a/sstables/sstables_manager.hh +++ b/sstables/sstables_manager.hh @@ -47,6 +47,10 @@ class sstables_manager { using list_type = boost::intrusive::list, boost::intrusive::constant_time_size>; + using set_type = boost::intrusive::set, + boost::intrusive::constant_time_size, + boost::intrusive::compare>; private: size_t _available_memory; db::large_data_handler& _large_data_handler; @@ -70,6 +74,8 @@ private: size_t _total_reclaimable_memory{0}; // Total memory reclaimed so far across all sstables size_t _total_memory_reclaimed{0}; + // Set of sstables from which memory has been reclaimed + set_type _reclaimed; bool _closing = false; promise<> _done;