]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
osd/scrubber: return a duration from ScrubQueue::scrub_sleep_time
authorSamuel Just <sjust@redhat.com>
Fri, 17 Feb 2023 06:18:40 +0000 (06:18 +0000)
committerRonen Friedman <rfriedma@redhat.com>
Wed, 26 Mar 2025 15:32:31 +0000 (15:32 +0000)
Signed-off-by: Samuel Just <sjust@redhat.com>
(cherry picked from commit 3a98f0c65b963aacd4b2f953fa3eb4e5c6b4c754)

src/osd/scrubber/osd_scrub_sched.cc
src/osd/scrubber/osd_scrub_sched.h
src/osd/scrubber/pg_scrubber.cc

index 82b7c689d4cd45568567a5193503f70f4dabdd3f..642b832662d56589e5b34896e1e810a96c3a5ea9 100644 (file)
@@ -558,9 +558,10 @@ ScrubQueue::scrub_schedule_t ScrubQueue::adjust_target_time(
   return sched_n_dead;
 }
 
-double ScrubQueue::scrub_sleep_time(bool must_scrub) const
+std::chrono::milliseconds ScrubQueue::scrub_sleep_time(bool must_scrub) const
 {
-  double regular_sleep_period = conf()->osd_scrub_sleep;
+  std::chrono::milliseconds regular_sleep_period{
+    uint64_t(std::max(0.0, conf()->osd_scrub_sleep) * 1000)};
 
   if (must_scrub || scrub_time_permit(time_now())) {
     return regular_sleep_period;
@@ -568,8 +569,10 @@ double ScrubQueue::scrub_sleep_time(bool must_scrub) const
 
   // relevant if scrubbing started during allowed time, but continued into
   // forbidden hours
-  double extended_sleep = conf()->osd_scrub_extended_sleep;
+  std::chrono::milliseconds extended_sleep{
+    uint64_t(std::max(0.0, conf()->osd_scrub_extended_sleep) * 1000)};
   dout(20) << "w/ extended sleep (" << extended_sleep << ")" << dendl;
+
   return std::max(extended_sleep, regular_sleep_period);
 }
 
index 17cd0e49377b2bf63cbdc4569430ca769572ad23..ac9dab728dca2378730c72751ee3e4d422a6521e 100644 (file)
@@ -389,15 +389,16 @@ class ScrubQueue {
   int get_blocked_pgs_count() const;
 
   /**
-   * Pacing the scrub operation by inserting delays (mostly between chunks)
+   * scrub_sleep_time
    *
-   * Special handling for regular scrubs that continued into "no scrub" times.
-   * Scrubbing will continue, but the delays will be controlled by a separate
-   * (read - with higher value) configuration element
-   * (osd_scrub_extended_sleep).
+   * Returns std::chrono::milliseconds indicating how long to wait between
+   * chunks.
+   *
+   * Implementation Note: Returned value will either osd_scrub_sleep or
+   * osd_scrub_extended_sleep depending on must_scrub_param and time
+   * of day (see configs osd_scrub_begin*)
    */
-  double scrub_sleep_time(bool must_scrub) const;  /// \todo (future) return
-                                                  /// milliseconds
+  std::chrono::milliseconds scrub_sleep_time(bool must_scrub) const;
 
   /**
    *  called every heartbeat to update the "daily" load average
index 2cca552107c916d056562e997133d7d8407ce114..b268ab103e5e3f3758a41c0484af190ebe4510b1 100644 (file)
@@ -891,9 +891,8 @@ void PgScrubber::add_delayed_scheduling()
 
   milliseconds sleep_time{0ms};
   if (m_needs_sleep) {
-    double scrub_sleep =
-      1000.0 * m_osds->get_scrub_services().scrub_sleep_time(m_flags.required);
-    sleep_time = milliseconds{int64_t(scrub_sleep)};
+    sleep_time = m_osds->get_scrub_services().scrub_sleep_time(
+      m_flags.required);
   }
   dout(15) << __func__ << " sleep: " << sleep_time.count() << "ms. needed? "
           << m_needs_sleep << dendl;