sstables_manager: start a fiber to reload components
Start a fiber that gets notified whenever an sstable gets deleted. The
fiber doesn't do anything yet but the following patch will add support
to reload reclaimed components if there is sufficient memory.
Signed-off-by: Lakshmi Narayanan Sreethar <lakshmi.sreethar@scylladb.com>
(cherry picked from commit f758d7b114)
This commit is contained in:
@@ -35,6 +35,7 @@ sstables_manager::sstables_manager(
|
||||
, _dir_semaphore(dir_sem)
|
||||
, _resolve_host_id(std::move(resolve_host_id))
|
||||
{
|
||||
_components_reloader_status = components_reloader_fiber();
|
||||
}
|
||||
|
||||
sstables_manager::~sstables_manager() {
|
||||
@@ -162,6 +163,17 @@ void sstables_manager::increment_total_reclaimable_memory_and_maybe_reclaim(ssta
|
||||
smlogger.info("Reclaimed {} bytes of memory from SSTable components. Total memory reclaimed so far is {} bytes", memory_reclaimed, _total_memory_reclaimed);
|
||||
}
|
||||
|
||||
future<> sstables_manager::components_reloader_fiber() {
|
||||
sstlog.trace("components_reloader_fiber start");
|
||||
while (true) {
|
||||
co_await _sstable_deleted_event.when();
|
||||
|
||||
if (_closing) {
|
||||
co_return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sstables_manager::add(sstable* sst) {
|
||||
_active.push_back(*sst);
|
||||
}
|
||||
@@ -187,6 +199,7 @@ void sstables_manager::deactivate(sstable* sst) {
|
||||
void sstables_manager::remove(sstable* sst) {
|
||||
_undergoing_close.erase(_undergoing_close.iterator_to(*sst));
|
||||
delete sst;
|
||||
_sstable_deleted_event.signal();
|
||||
maybe_done();
|
||||
}
|
||||
|
||||
@@ -214,6 +227,9 @@ future<> sstables_manager::close() {
|
||||
maybe_done();
|
||||
co_await _done.get_future();
|
||||
co_await _sstable_metadata_concurrency_sem.stop();
|
||||
// stop the components reload fiber
|
||||
_sstable_deleted_event.signal();
|
||||
co_await std::move(_components_reloader_status);
|
||||
}
|
||||
|
||||
void sstables_manager::plug_system_keyspace(db::system_keyspace& sys_ks) noexcept {
|
||||
|
||||
@@ -108,6 +108,9 @@ private:
|
||||
size_t _total_memory_reclaimed{0};
|
||||
// Set of sstables from which memory has been reclaimed
|
||||
set_type _reclaimed;
|
||||
// Condition variable that gets notified when an sstable is deleted
|
||||
seastar::condition_variable _sstable_deleted_event;
|
||||
future<> _components_reloader_status = make_ready_future<>();
|
||||
|
||||
bool _closing = false;
|
||||
promise<> _done;
|
||||
@@ -191,6 +194,8 @@ private:
|
||||
// memory and if the total memory usage exceeds the pre-defined threshold,
|
||||
// reclaim it from the SSTable that has the most reclaimable memory.
|
||||
void increment_total_reclaimable_memory_and_maybe_reclaim(sstable* sst);
|
||||
// Fiber to reload reclaimed components back into memory when memory becomes available.
|
||||
future<> components_reloader_fiber();
|
||||
private:
|
||||
db::large_data_handler& get_large_data_handler() const {
|
||||
return _large_data_handler;
|
||||
|
||||
Reference in New Issue
Block a user