From: Divyansh Kamboj Date: Wed, 7 Dec 2022 10:25:38 +0000 (+0530) Subject: rbd-mirror: add information about the last snapshot sync to image status X-Git-Tag: v16.2.13~134^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=0d84a57d7562247363ba200369ae3fba68ce7161;p=ceph.git rbd-mirror: add information about the last snapshot sync to image status this commit adds fields for time taken to sync and bytes in the last snapshot to the mirror image status command. Fixes: https://tracker.ceph.com/issues/58755 Signed-off-by: Divyansh Kamboj (cherry picked from commit 9b9f18a65d2430ddcf32cbf85566b0223be91758) --- diff --git a/src/tools/rbd_mirror/image_replayer/snapshot/Replayer.cc b/src/tools/rbd_mirror/image_replayer/snapshot/Replayer.cc index 4a44a57bc223..e9bbabeb1ff2 100644 --- a/src/tools/rbd_mirror/image_replayer/snapshot/Replayer.cc +++ b/src/tools/rbd_mirror/image_replayer/snapshot/Replayer.cc @@ -290,6 +290,9 @@ bool Replayer::get_replay_status(std::string* description, m_bytes_per_snapshot); root_obj["bytes_per_snapshot"] = round_to_two_places(bytes_per_snapshot); + root_obj["last_snapshot_sync_seconds"] = m_last_snapshot_sync_seconds; + root_obj["last_snapshot_bytes"] = m_last_snapshot_bytes; + auto pending_bytes = bytes_per_snapshot * m_pending_snapshots; if (bytes_per_second > 0 && m_pending_snapshots > 0) { std::uint64_t seconds_until_synced = round_to_two_places( @@ -1102,21 +1105,23 @@ void Replayer::handle_copy_image(int r) { { std::unique_lock locker{m_lock}; + m_last_snapshot_bytes = m_snapshot_bytes; m_bytes_per_snapshot(m_snapshot_bytes); - auto time = ceph_clock_now() - m_snapshot_replay_start; + utime_t duration = ceph_clock_now() - m_snapshot_replay_start; + m_last_snapshot_sync_seconds = duration.sec(); + if (g_snapshot_perf_counters) { g_snapshot_perf_counters->inc(l_rbd_mirror_snapshot_replay_bytes, m_snapshot_bytes); g_snapshot_perf_counters->inc(l_rbd_mirror_snapshot_replay_snapshots); g_snapshot_perf_counters->tinc( - l_rbd_mirror_snapshot_replay_snapshots_time, time); + l_rbd_mirror_snapshot_replay_snapshots_time, duration); } if (m_perf_counters) { m_perf_counters->inc(l_rbd_mirror_snapshot_replay_bytes, m_snapshot_bytes); m_perf_counters->inc(l_rbd_mirror_snapshot_replay_snapshots); - m_perf_counters->tinc(l_rbd_mirror_snapshot_replay_snapshots_time, time); + m_perf_counters->tinc(l_rbd_mirror_snapshot_replay_snapshots_time, duration); } - m_snapshot_bytes = 0; } apply_image_state(); diff --git a/src/tools/rbd_mirror/image_replayer/snapshot/Replayer.h b/src/tools/rbd_mirror/image_replayer/snapshot/Replayer.h index e3c4c2089028..17d45f6bc802 100644 --- a/src/tools/rbd_mirror/image_replayer/snapshot/Replayer.h +++ b/src/tools/rbd_mirror/image_replayer/snapshot/Replayer.h @@ -238,8 +238,11 @@ private: DeepCopyHandler* m_deep_copy_handler = nullptr; TimeRollingMean m_bytes_per_second; + uint64_t m_last_snapshot_sync_seconds = 0; uint64_t m_snapshot_bytes = 0; + uint64_t m_last_snapshot_bytes = 0; + boost::accumulators::accumulator_set< uint64_t, boost::accumulators::stats< boost::accumulators::tag::rolling_mean>> m_bytes_per_snapshot{