From e699963c9bfa10ec65b8a4fa016377c4ce85c0bc Mon Sep 17 00:00:00 2001 From: Ronen Friedman Date: Sun, 28 Jan 2024 01:42:09 -0600 Subject: [PATCH] osd/scrub: define the scrub_reserver to track remote reservations Signed-off-by: Ronen Friedman --- src/osd/OSD.cc | 5 +++++ src/osd/OSD.h | 10 ++++++++++ 2 files changed, 15 insertions(+) diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 9e6b3fd9d92..61af98924c7 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -273,6 +273,8 @@ OSDService::OSDService(OSD *osd, ceph::async::io_context_pool& poolctx) : cct->_conf->osd_min_recovery_priority), snap_reserver(cct, &reserver_finisher, cct->_conf->osd_max_trimming_pgs), + scrub_reserver(cct, &reserver_finisher, + cct->_conf->osd_max_scrubs), recovery_ops_active(0), recovery_ops_reserved(0), recovery_paused(false), @@ -9889,6 +9891,9 @@ void OSD::handle_conf_change(const ConfigProxy& conf, if (changed.count("osd_max_trimming_pgs")) { service.snap_reserver.set_max(cct->_conf->osd_max_trimming_pgs); } + if (changed.count("osd_max_scrubs")) { + service.scrub_reserver.set_max(cct->_conf->osd_max_scrubs); + } if (changed.count("osd_op_complaint_time") || changed.count("osd_op_log_threshold")) { op_tracker.set_complaint_and_threshold(cct->_conf->osd_op_complaint_time, diff --git a/src/osd/OSD.h b/src/osd/OSD.h index 5f561e64318..8c03e019203 100644 --- a/src/osd/OSD.h +++ b/src/osd/OSD.h @@ -251,6 +251,14 @@ public: */ std::optional get_locked_pg(spg_t pgid) final; + /** + * the entity that counts the number of active replica scrub + * operations, and grant scrub reservation requests asynchronously. + */ + AsyncReserver& get_scrub_reserver() { + return scrub_reserver; + } + private: // -- agent shared state -- ceph::mutex agent_lock = ceph::make_mutex("OSDService::agent_lock"); @@ -494,6 +502,8 @@ public: void send_pg_created(); AsyncReserver snap_reserver; + /// keeping track of replicas being reserved for scrubbing + AsyncReserver scrub_reserver; void queue_recovery_context(PG *pg, GenContext *c, uint64_t cost, -- 2.39.5