From: Ronen Friedman Date: Sat, 14 Oct 2023 12:55:42 +0000 (-0500) Subject: osd/scrub: modify slow-replica-reply warning implementation X-Git-Tag: v19.0.0~197^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=9e5868f33b25cf11be42e615cb22e23d158a6c86;p=ceph.git osd/scrub: modify slow-replica-reply warning implementation Merging the 'do once' functionality into the timeout duration. Signed-off-by: Ronen Friedman --- diff --git a/src/osd/scrubber/scrub_reservations.cc b/src/osd/scrubber/scrub_reservations.cc index 4d187a2a644f..3194c9871d57 100644 --- a/src/osd/scrubber/scrub_reservations.cc +++ b/src/osd/scrubber/scrub_reservations.cc @@ -51,6 +51,10 @@ ReplicaReservations::ReplicaReservations(ScrubMachineListener& scrbr) m_next_to_request = m_sorted_secondaries.cbegin(); // send out the 1'st request (unless we have no replicas) send_next_reservation_or_complete(); + + m_slow_response_warn_timeout = + m_scrubber.get_pg_cct()->_conf.get_val( + "osd_scrub_slow_reservation_response"); } void ReplicaReservations::release_all() @@ -100,15 +104,14 @@ bool ReplicaReservations::handle_reserve_grant(OpRequestRef op, pg_shard_t from) auto elapsed = clock::now() - m_last_request_sent_at; // log a warning if the response was slow to arrive - auto warn_timeout = m_scrubber.get_pg_cct()->_conf.get_val( - "osd_scrub_slow_reservation_response"); - if (!m_slow_response_warned && (elapsed > warn_timeout)) { + if ((m_slow_response_warn_timeout > 0ms) && + (elapsed > m_slow_response_warn_timeout)) { dout(1) << fmt::format( "slow reservation response from {} ({}ms)", from, duration_cast(elapsed).count()) << dendl; // prevent additional warnings - m_slow_response_warned = true; + m_slow_response_warn_timeout = 0ms; } dout(10) << fmt::format( "granted by {} ({} of {}) in {}ms", from, diff --git a/src/osd/scrubber/scrub_reservations.h b/src/osd/scrubber/scrub_reservations.h index a603c7073563..1f2628579dcc 100644 --- a/src/osd/scrubber/scrub_reservations.h +++ b/src/osd/scrubber/scrub_reservations.h @@ -66,8 +66,9 @@ class ReplicaReservations { /// for logs, and for detecting slow peers clock::time_point m_last_request_sent_at; - /// used to prevent multiple "slow response" warnings - bool m_slow_response_warned{false}; + /// the 'slow response' timeout (in milliseconds) - as configured. + /// Doubles as a 'do once' flag for the warning. + std::chrono::milliseconds m_slow_response_warn_timeout; public: ReplicaReservations(ScrubMachineListener& scrubber);