From cf9ed68c816b513d952e75399828ca306fb852a1 Mon Sep 17 00:00:00 2001 From: Ronen Friedman Date: Sun, 28 Jan 2024 09:35:07 -0600 Subject: [PATCH] osd/scrub: restore 'dump_scrub_reservations' functionality As ScrubResources is no longer involved in remote reservations, some of the data listed by 'dump_scrub_reservations' is now collected by OsdScrub itself (prior to this change, OsdScrub just forwarded the request to ScrubResources). Signed-off-by: Ronen Friedman --- src/osd/OSD.cc | 2 +- src/osd/scrubber/osd_scrub.cc | 8 ++++++++ src/osd/scrubber/osd_scrub.h | 2 ++ src/osd/scrubber/osd_scrub_sched.h | 7 +++++++ 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 61af98924c7..b0ff7883fab 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -2893,7 +2893,7 @@ will start to track new ops received afterwards."; f->close_section(); } else if (prefix == "dump_scrub_reservations") { f->open_object_section("scrub_reservations"); - service.get_scrub_services().resource_bookkeeper().dump_scrub_reservations(f); + service.get_scrub_services().dump_scrub_reservations(f); f->close_section(); } else if (prefix == "get_latest_osdmap") { get_latest_osdmap(); diff --git a/src/osd/scrubber/osd_scrub.cc b/src/osd/scrubber/osd_scrub.cc index b4e1ec8cef2..a74e1ae5c30 100644 --- a/src/osd/scrubber/osd_scrub.cc +++ b/src/osd/scrubber/osd_scrub.cc @@ -57,6 +57,14 @@ void OsdScrub::dump_scrubs(ceph::Formatter* f) const m_queue.dump_scrubs(f); } +void OsdScrub::dump_scrub_reservations(ceph::Formatter* f) const +{ + m_resource_bookkeeper.dump_scrub_reservations(f); + f->open_array_section("remote_scrub_reservations"); + m_osd_svc.get_scrub_reserver().dump(f); + f->close_section(); +} + void OsdScrub::log_fwd(std::string_view text) { dout(20) << text << dendl; diff --git a/src/osd/scrubber/osd_scrub.h b/src/osd/scrubber/osd_scrub.h index 9aca86ad798..64709cc7aab 100644 --- a/src/osd/scrubber/osd_scrub.h +++ b/src/osd/scrubber/osd_scrub.h @@ -51,6 +51,8 @@ class OsdScrub { void dump_scrubs(ceph::Formatter* f) const; ///< fwd to the queue + void dump_scrub_reservations(ceph::Formatter* f) const; + /** * on_config_change() (the refactored "OSD::sched_all_scrubs()") * diff --git a/src/osd/scrubber/osd_scrub_sched.h b/src/osd/scrubber/osd_scrub_sched.h index 0eddb22ea7d..95f1680d403 100644 --- a/src/osd/scrubber/osd_scrub_sched.h +++ b/src/osd/scrubber/osd_scrub_sched.h @@ -108,6 +108,7 @@ ScrubQueue interfaces (main functions): // clang-format on #include +#include "common/AsyncReserver.h" #include "utime.h" #include "osd/scrubber/scrub_job.h" #include "osd/PG.h" @@ -135,6 +136,12 @@ class ScrubSchedListener { */ virtual std::optional get_locked_pg(spg_t pgid) = 0; + /** + * allow access to the scrub_reserver, the AsyncReserver that keeps track + * of 'remote replica reservations'. + */ + virtual AsyncReserver& get_scrub_reserver() = 0; + virtual ~ScrubSchedListener() {} }; -- 2.39.5