]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
osd/scrub: control reservation queueing using a config option
authorRonen Friedman <rfriedma@redhat.com>
Sun, 28 Jan 2024 11:45:50 +0000 (05:45 -0600)
committerRonen Friedman <rfriedma@redhat.com>
Wed, 31 Jan 2024 07:29:19 +0000 (01:29 -0600)
Signed-off-by: Ronen Friedman <rfriedma@redhat.com>
src/common/options/osd.yaml.in
src/osd/scrubber/scrub_machine.cc

index c2281c00ece4659a9b95b6c4e1e2c66dc8187897..2a7bad84e7b1b59edf8671394fd91e340b3be0b0 100644 (file)
@@ -535,6 +535,16 @@ options:
   see_also:
   - osd_scrub_slow_reservation_response
   with_legacy: false
+- name: osd_scrub_disable_reservation_queuing
+  type: bool
+  level: advanced
+  desc: Disable queuing of scrub reservations
+  long_desc: When set - scrub replica reservations are responded to immediately, with
+    either success or failure (the pre-Squid version behaviour). This configuration
+    option is introduced to support mixed-version clusters and debugging, and will
+    be removed in the next release.
+  default: false
+  with_legacy: false
 # where rados plugins are stored
 - name: osd_class_dir
   type: str
index 57c0492ec2e42fee10ec10f6aebba8eaed3a91b1..ce4196e1ebbb13a832d3499a7d14b4e8275450d1 100644 (file)
@@ -941,7 +941,16 @@ sc::result ReplicaUnreserved::react(const ReplicaReserveReq& ev)
   DECLARE_LOCALS;  // 'scrbr' & 'pg_id' aliases
   dout(10) << "ReplicaUnreserved::react(const ReplicaReserveReq&)" << dendl;
 
-  bool async_request = true && ev.m_op->get_req<MOSDScrubReserve>()->wait_for_resources /* && a config */;
+  const auto& m = *(ev.m_op->get_req<MOSDScrubReserve>());
+  const auto async_disabled = scrbr->get_pg_cct()->_conf.get_val<bool>(
+      "osd_scrub_disable_reservation_queuing");
+  const bool async_request = !async_disabled && m.wait_for_resources;
+  dout(15) << fmt::format(
+                 "ReplicaUnreserved::react(const ReplicaReserveReq&): "
+                 "request:{} disabled?:{} -> async? {}", m.wait_for_resources,
+                 async_disabled, async_request)
+          << dendl;
+
   switch (context<ReplicaActive>().on_reserve_request(ev, async_request)) {
     case ReplicaReactCode::discard:
       return discard_event();