see_also:
- osd_scrub_retry_pg_state
- osd_scrub_retry_after_noscrub
+ - osd_scrub_retry_new_interval
+ - osd_scrub_retry_trimming
with_legacy: false
- name: osd_scrub_retry_after_noscrub
type: int
see_also:
- osd_scrub_retry_delay
with_legacy: false
+- name: osd_scrub_retry_new_interval
+ type: int
+ level: advanced
+ desc: Period (in seconds) before retrying a scrub aborted on a new interval
+ long_desc: Minimum delay before retrying, after a scrub was aborted as the
+ PG interval changed.
+ default: 10
+ min: 1
+ see_also:
+ - osd_scrub_retry_delay
+ with_legacy: false
- name: osd_scrub_disable_reservation_queuing
type: bool
level: advanced
SchedTarget& ScrubJob::delay_on_failure(
scrub_level_t level,
- Scrub::delay_cause_t delay_cause,
+ delay_cause_t delay_cause,
utime_t scrub_clock_now)
{
seconds delay = seconds(cct->_conf.get_val<int64_t>("osd_scrub_retry_delay"));
case delay_cause_t::snap_trimming:
delay = seconds(cct->_conf.get_val<int64_t>("osd_scrub_retry_trimming"));
break;
+ case delay_cause_t::interval:
+ delay = seconds(cct->_conf.get_val<int64_t>("osd_scrub_retry_new_interval"));
+ break;
case delay_cause_t::local_resources:
+ case delay_cause_t::aborted:
default:
// for all other possible delay causes: use the default delay
break;
ceph_assert(m_reservations);
m_reservations->discard_remote_reservations();
+ m_abort_reason = delay_cause_t::interval;
return transit<NotActive>();
}
// completed successfully), we use it now to set the 'failed scrub' duration.
if (session.m_session_started_at != ScrubTimePoint{}) {
// delay the next invocation of the scrubber on this target
- scrbr->on_mid_scrub_abort(Scrub::delay_cause_t::aborted);
+ scrbr->on_mid_scrub_abort(
+ session.m_abort_reason.value_or(Scrub::delay_cause_t::aborted));
auto logged_duration = ScrubClock::now() - session.m_session_started_at;
session.m_perf_set->tinc(scrbcnt_failed_elapsed, logged_duration);
/// the time when the session was initiated
ScrubTimePoint m_session_started_at{ScrubClock::now()};
+
+ /// abort reason - if known. Determines the delay time imposed on the
+ /// failed scrub target.
+ std::optional<Scrub::delay_cause_t> m_abort_reason{std::nullopt};
};
struct ReservingReplicas : sc::state<ReservingReplicas, Session>, NamedSimply {