mirror of
https://github.com/scylladb/scylladb.git
synced 2026-05-12 19:02:12 +00:00
Merge 'sstables_manager: use maintenance scheduling group to run components reload fiber' from Lakshmi Narayanan Sreethar
PR https://github.com/scylladb/scylladb/pull/18186 introduced a fiber that reloads reclaimed bloom filters when memory becomes available. Use maintenance scheduling group to run that fiber instead of running it in the main scheduling group. Fixes #18675 Closes scylladb/scylladb#18721 * github.com:scylladb/scylladb: sstables_manager: use maintenance scheduling group to run components reload fiber sstables_manager: add member to store maintenance scheduling group
This commit is contained in:
@@ -374,8 +374,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<db::nop_large_data_handler>())
|
||||
, _user_sstables_manager(std::make_unique<sstables::sstables_manager>("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<sstables::sstables_manager>("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<sstables::sstables_manager>("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<sstables::sstables_manager>("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<db::data_listeners>())
|
||||
, _mnotifier(mn)
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
*/
|
||||
|
||||
#include <seastar/coroutine/parallel_for_each.hh>
|
||||
#include <seastar/coroutine/switch_to.hh>
|
||||
#include "log.hh"
|
||||
#include "sstables/sstables_manager.hh"
|
||||
#include "sstables/sstables_registry.hh"
|
||||
@@ -23,7 +24,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<locator::host_id()>&& 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<locator::host_id()>&& 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 +38,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();
|
||||
}
|
||||
@@ -176,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();
|
||||
|
||||
@@ -123,8 +123,10 @@ private:
|
||||
// after system_keyspace initialization.
|
||||
noncopyable_function<locator::host_id()> _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<locator::host_id()>&& 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<locator::host_id()>&& 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,
|
||||
|
||||
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user