From: Ronen Friedman Date: Sun, 28 Jan 2024 07:42:09 +0000 (-0600) Subject: osd/scrub: define the scrub_reserver to track remote reservations X-Git-Tag: v19.3.0~106^2~7 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e699963c9bfa10ec65b8a4fa016377c4ce85c0bc;p=ceph.git osd/scrub: define the scrub_reserver to track remote reservations Signed-off-by: Ronen Friedman --- diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 9e6b3fd9d929..61af98924c74 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 5f561e643182..8c03e0192033 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,