From: Jos Collin Date: Thu, 22 Feb 2024 05:33:23 +0000 (+0530) Subject: cephfs-mirror: use monotonic clock X-Git-Tag: v19.1.1~271^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=048cf22a84fe77ae08211e3b344d7746f9e3a449;p=ceph.git cephfs-mirror: use monotonic clock Fixes: https://tracker.ceph.com/issues/62265 Signed-off-by: Jos Collin (cherry picked from commit 7f0e7feea52c2917a6c234fffce1e5d9ff8ef791) --- diff --git a/src/tools/cephfs_mirror/FSMirror.h b/src/tools/cephfs_mirror/FSMirror.h index 75fca758520d..aaba1cb9f3a7 100644 --- a/src/tools/cephfs_mirror/FSMirror.h +++ b/src/tools/cephfs_mirror/FSMirror.h @@ -52,7 +52,7 @@ public: m_mirror_watcher->is_failed(); } - utime_t get_failed_ts() { + monotime get_failed_ts() { std::scoped_lock locker(m_lock); if (m_instance_watcher) { return m_instance_watcher->get_failed_ts(); @@ -61,7 +61,7 @@ public: return m_mirror_watcher->get_failed_ts(); } - return utime_t(); + return clock::now(); } bool is_blocklisted() { @@ -69,7 +69,7 @@ public: return is_blocklisted(locker); } - utime_t get_blocklisted_ts() { + monotime get_blocklisted_ts() { std::scoped_lock locker(m_lock); if (m_instance_watcher) { return m_instance_watcher->get_blocklisted_ts(); @@ -78,7 +78,7 @@ public: return m_mirror_watcher->get_blocklisted_ts(); } - return utime_t(); + return clock::now(); } Peers get_peers() { diff --git a/src/tools/cephfs_mirror/InstanceWatcher.cc b/src/tools/cephfs_mirror/InstanceWatcher.cc index b6a51a141aad..fece936a94b4 100644 --- a/src/tools/cephfs_mirror/InstanceWatcher.cc +++ b/src/tools/cephfs_mirror/InstanceWatcher.cc @@ -116,15 +116,15 @@ void InstanceWatcher::handle_rewatch_complete(int r) { dout(0) << ": client blocklisted" <authenticate(std::chrono::duration(m_cct->_conf.get_val("client_mount_timeout")).count()); + r = m_monc->authenticate(duration(m_cct->_conf.get_val("client_mount_timeout")).count()); if (r < 0) { derr << ": failed to authenticate to monitor: " << cpp_strerror(r) << dendl; return r; @@ -547,19 +549,18 @@ void Mirror::peer_removed(const Filesystem &filesystem, const Peer &peer) { void Mirror::update_fs_mirrors() { dout(20) << dendl; - auto now = ceph_clock_now(); - double blocklist_interval = g_ceph_context->_conf.get_val - ("cephfs_mirror_restart_mirror_on_blocklist_interval").count(); - double failed_interval = g_ceph_context->_conf.get_val - ("cephfs_mirror_restart_mirror_on_failure_interval").count(); + seconds blocklist_interval = g_ceph_context->_conf.get_val + ("cephfs_mirror_restart_mirror_on_blocklist_interval"); + seconds failed_interval = g_ceph_context->_conf.get_val + ("cephfs_mirror_restart_mirror_on_failure_interval"); { std::scoped_lock locker(m_lock); for (auto &[filesystem, mirror_action] : m_mirror_actions) { auto failed_restart = mirror_action.fs_mirror && mirror_action.fs_mirror->is_failed() && - (failed_interval > 0 && (mirror_action.fs_mirror->get_failed_ts() - now) > failed_interval); + (failed_interval.count() > 0 && duration_cast(mirror_action.fs_mirror->get_failed_ts() - clock::now()) > failed_interval); auto blocklisted_restart = mirror_action.fs_mirror && mirror_action.fs_mirror->is_blocklisted() && - (blocklist_interval > 0 && (mirror_action.fs_mirror->get_blocklisted_ts() - now) > blocklist_interval); + (blocklist_interval.count() > 0 && duration_cast(mirror_action.fs_mirror->get_blocklisted_ts() - clock::now()) > blocklist_interval); if (!mirror_action.action_in_progress && !_is_restarting(filesystem)) { if (failed_restart || blocklisted_restart) { @@ -592,7 +593,7 @@ void Mirror::schedule_mirror_update_task() { m_timer_task = nullptr; update_fs_mirrors(); }); - double after = g_ceph_context->_conf.get_val + double after = g_ceph_context->_conf.get_val ("cephfs_mirror_action_update_interval").count(); dout(20) << ": scheduling fs mirror update (" << m_timer_task << ") after " << after << " seconds" << dendl; diff --git a/src/tools/cephfs_mirror/MirrorWatcher.cc b/src/tools/cephfs_mirror/MirrorWatcher.cc index b3770d103ea3..55e106512d31 100644 --- a/src/tools/cephfs_mirror/MirrorWatcher.cc +++ b/src/tools/cephfs_mirror/MirrorWatcher.cc @@ -11,7 +11,6 @@ #include "aio_utils.h" #include "MirrorWatcher.h" #include "FSMirror.h" -#include "Types.h" #define dout_context g_ceph_context #define dout_subsys ceph_subsys_cephfs_mirror @@ -93,15 +92,15 @@ void MirrorWatcher::handle_rewatch_complete(int r) { dout(0) << ": client blocklisted" < last_failed; // lat failed timestamp + boost::optional last_failed; // lat failed timestamp bool failed = false; // hit upper cap for consecutive failures boost::optional> last_synced_snap; boost::optional> current_syncing_snap; uint64_t synced_snap_count = 0; uint64_t deleted_snap_count = 0; uint64_t renamed_snap_count = 0; - time last_synced = clock::zero(); + monotime last_synced = clock::zero(); boost::optional last_sync_duration; }; diff --git a/src/tools/cephfs_mirror/Types.h b/src/tools/cephfs_mirror/Types.h index 016a8dc860c5..fda9bdca4ebb 100644 --- a/src/tools/cephfs_mirror/Types.h +++ b/src/tools/cephfs_mirror/Types.h @@ -81,6 +81,8 @@ typedef std::shared_ptr IoCtxRef; // not a shared_ptr since the type is incomplete typedef ceph_mount_info *MountRef; +using clock = ceph::coarse_mono_clock; +using monotime = ceph::coarse_mono_time; } // namespace mirror } // namespace cephfs