]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
osd/scrub: define the scrub_reserver to track remote reservations
authorRonen Friedman <rfriedma@redhat.com>
Sun, 28 Jan 2024 07:42:09 +0000 (01:42 -0600)
committerRonen Friedman <rfriedma@redhat.com>
Tue, 30 Jan 2024 08:56:23 +0000 (02:56 -0600)
Signed-off-by: Ronen Friedman <rfriedma@redhat.com>
src/osd/OSD.cc
src/osd/OSD.h

index 9e6b3fd9d929c118c0dbf553a527498740d059d9..61af98924c74d5b102e7588fb689b070af3454df 100644 (file)
@@ -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,
index 5f561e6431824c456d2624f531930e2535abae87..8c03e0192033992b48943da8d9c6c308c79ca574 100644 (file)
@@ -251,6 +251,14 @@ public:
    */
   std::optional<PGLockWrapper> 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<spg_t, Finisher>& 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<spg_t, Finisher> snap_reserver;
+  /// keeping track of replicas being reserved for scrubbing
+  AsyncReserver<spg_t, Finisher> scrub_reserver;
   void queue_recovery_context(PG *pg,
                               GenContext<ThreadPool::TPHandle&> *c,
                               uint64_t cost,