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;
// 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);
}
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
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;