From: Samuel Just Date: Tue, 19 Aug 2025 16:24:40 +0000 (-0700) Subject: crimson/.../mclock_scheduler: add crimson specific background job X-Git-Tag: testing/wip-vshankar-testing-20250917.163544-debug~2^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=12680f8771201612a973a527f45030a38deef7d4;p=ceph-ci.git crimson/.../mclock_scheduler: add crimson specific background job Signed-off-by: Samuel Just --- diff --git a/src/crimson/osd/scheduler/mclock_scheduler.h b/src/crimson/osd/scheduler/mclock_scheduler.h index 16082ffd095..6f42ebfdeff 100644 --- a/src/crimson/osd/scheduler/mclock_scheduler.h +++ b/src/crimson/osd/scheduler/mclock_scheduler.h @@ -15,6 +15,8 @@ #pragma once +#include +#include #include #include #include @@ -74,12 +76,56 @@ class mClockScheduler : public Scheduler, md_config_obs_t { const scheduler_id_t &id) const; } client_registry; + class crimson_mclock_cleaning_job_t { + struct job_control_t { + std::chrono::milliseconds period; + std::function body; + + bool stopping = false; + seastar::condition_variable cv; + + + template + job_control_t(D _period, F &&_body) : + period(std::chrono::duration_cast(_period)), + body(std::forward(_body)) { + } + }; + seastar::lw_shared_ptr control; + + static seastar::future<> run( + seastar::lw_shared_ptr control) { + while (!control->stopping) { + std::invoke(control->body); + co_await control->cv.wait(control->period); + } + } + public: + template + crimson_mclock_cleaning_job_t(Args&&... args) : + control(seastar::make_lw_shared( + std::forward(args)...)) + { + std::ignore = run(control); + } + + void try_update(milliseconds _period) { + control->period = _period; + control->cv.signal(); + } + + ~crimson_mclock_cleaning_job_t() { + control->stopping = true; + control->cv.signal(); + } + }; using mclock_queue_t = crimson::dmclock::PullPriorityQueue< scheduler_id_t, item_t, true, true, - 2>; + 2, + crimson_mclock_cleaning_job_t>; mclock_queue_t scheduler; std::list immediate;