From 79f674629803a979a981333cfe6658c5e9874a22 Mon Sep 17 00:00:00 2001 From: Lakshmi Narayanan Sreethar Date: Tue, 14 May 2024 21:17:40 +0530 Subject: [PATCH 1/2] sstables_manager: add member to store maintenance scheduling group Store that maintenance scheduling group inside the sstables_manager. The next patch will use this to run the components reloader fiber. Signed-off-by: Lakshmi Narayanan Sreethar --- replica/database.cc | 4 ++-- sstables/sstables_manager.cc | 3 ++- sstables/sstables_manager.hh | 4 +++- test/lib/test_services.cc | 2 +- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/replica/database.cc b/replica/database.cc index 167d00110f..76953927ad 100644 --- a/replica/database.cc +++ b/replica/database.cc @@ -372,8 +372,8 @@ database::database(const db::config& cfg, database_config dbcfg, service::migrat _cfg.compaction_rows_count_warning_threshold, _cfg.compaction_collection_elements_count_warning_threshold)) , _nop_large_data_handler(std::make_unique()) - , _user_sstables_manager(std::make_unique("user", *_large_data_handler, _cfg, feat, _row_cache_tracker, dbcfg.available_memory, sst_dir_sem, [&stm]{ return stm.get()->get_my_id(); }, &sstm)) - , _system_sstables_manager(std::make_unique("system", *_nop_large_data_handler, _cfg, feat, _row_cache_tracker, dbcfg.available_memory, sst_dir_sem, [&stm]{ return stm.get()->get_my_id(); })) + , _user_sstables_manager(std::make_unique("user", *_large_data_handler, _cfg, feat, _row_cache_tracker, dbcfg.available_memory, sst_dir_sem, [&stm]{ return stm.get()->get_my_id(); }, dbcfg.streaming_scheduling_group, &sstm)) + , _system_sstables_manager(std::make_unique("system", *_nop_large_data_handler, _cfg, feat, _row_cache_tracker, dbcfg.available_memory, sst_dir_sem, [&stm]{ return stm.get()->get_my_id(); }, dbcfg.streaming_scheduling_group)) , _result_memory_limiter(dbcfg.available_memory / 10) , _data_listeners(std::make_unique()) , _mnotifier(mn) diff --git a/sstables/sstables_manager.cc b/sstables/sstables_manager.cc index 527a850d99..01a3010791 100644 --- a/sstables/sstables_manager.cc +++ b/sstables/sstables_manager.cc @@ -23,7 +23,7 @@ namespace sstables { logging::logger smlogger("sstables_manager"); sstables_manager::sstables_manager( - sstring name, db::large_data_handler& large_data_handler, const db::config& dbcfg, gms::feature_service& feat, cache_tracker& ct, size_t available_memory, directory_semaphore& dir_sem, noncopyable_function&& resolve_host_id, storage_manager* shared) + sstring name, db::large_data_handler& large_data_handler, const db::config& dbcfg, gms::feature_service& feat, cache_tracker& ct, size_t available_memory, directory_semaphore& dir_sem, noncopyable_function&& resolve_host_id, scheduling_group maintenance_sg, storage_manager* shared) : _storage(shared) , _available_memory(available_memory) , _large_data_handler(large_data_handler), _db_config(dbcfg), _features(feat), _cache_tracker(ct) @@ -37,6 +37,7 @@ sstables_manager::sstables_manager( reader_concurrency_semaphore::register_metrics::no) , _dir_semaphore(dir_sem) , _resolve_host_id(std::move(resolve_host_id)) + , _maintenance_sg(std::move(maintenance_sg)) { _components_reloader_status = components_reloader_fiber(); } diff --git a/sstables/sstables_manager.hh b/sstables/sstables_manager.hh index b63a77d18b..99cb9a6468 100644 --- a/sstables/sstables_manager.hh +++ b/sstables/sstables_manager.hh @@ -123,8 +123,10 @@ private: // after system_keyspace initialization. noncopyable_function _resolve_host_id; + scheduling_group _maintenance_sg; + public: - explicit sstables_manager(sstring name, db::large_data_handler& large_data_handler, const db::config& dbcfg, gms::feature_service& feat, cache_tracker&, size_t available_memory, directory_semaphore& dir_sem, noncopyable_function&& resolve_host_id, storage_manager* shared = nullptr); + explicit sstables_manager(sstring name, db::large_data_handler& large_data_handler, const db::config& dbcfg, gms::feature_service& feat, cache_tracker&, size_t available_memory, directory_semaphore& dir_sem, noncopyable_function&& resolve_host_id, scheduling_group maintenance_sg = current_scheduling_group(), storage_manager* shared = nullptr); virtual ~sstables_manager(); shared_sstable make_sstable(schema_ptr schema, sstring table_dir, diff --git a/test/lib/test_services.cc b/test/lib/test_services.cc index 73bfdbdb4a..e3641e4bd4 100644 --- a/test/lib/test_services.cc +++ b/test/lib/test_services.cc @@ -213,7 +213,7 @@ test_env::impl::impl(test_env_config cfg, sstables::storage_manager* sstm) , feature_service(gms::feature_config_from_db_config(*db_config)) , mgr("test_env", cfg.large_data_handler == nullptr ? nop_ld_handler : *cfg.large_data_handler, *db_config, feature_service, cache_tracker, cfg.available_memory, dir_sem, - [host_id = locator::host_id::create_random_id()]{ return host_id; }, sstm) + [host_id = locator::host_id::create_random_id()]{ return host_id; }, current_scheduling_group(), sstm) , semaphore(reader_concurrency_semaphore::no_limits{}, "sstables::test_env", reader_concurrency_semaphore::register_metrics::no) , use_uuid(cfg.use_uuid) , storage(std::move(cfg.storage)) From 6f58768c460c8d9fe2f3303fa43bbe02574b5cf4 Mon Sep 17 00:00:00 2001 From: Lakshmi Narayanan Sreethar Date: Tue, 14 May 2024 21:17:54 +0530 Subject: [PATCH 2/2] sstables_manager: use maintenance scheduling group to run components reload fiber Fixes #18675 Signed-off-by: Lakshmi Narayanan Sreethar --- sstables/sstables_manager.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sstables/sstables_manager.cc b/sstables/sstables_manager.cc index 01a3010791..8c4856e180 100644 --- a/sstables/sstables_manager.cc +++ b/sstables/sstables_manager.cc @@ -7,6 +7,7 @@ */ #include +#include #include "log.hh" #include "sstables/sstables_manager.hh" #include "sstables/sstables_registry.hh" @@ -177,6 +178,8 @@ size_t sstables_manager::get_memory_available_for_reclaimable_components() { } future<> sstables_manager::components_reloader_fiber() { + co_await coroutine::switch_to(_maintenance_sg); + sstlog.trace("components_reloader_fiber start"); while (true) { co_await _sstable_deleted_event.when();