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;