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 4a44a57bc22..e9bbabeb1ff 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 e3c4c208902..17d45f6bc80 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{