From 8a9a1bf6eb6d43181a947a417bd0e94e5cd6e70a Mon Sep 17 00:00:00 2001 From: Jason Dillaman Date: Thu, 12 Dec 2019 20:46:14 -0500 Subject: [PATCH] rbd-mirror: moved image asok/perf counter name helper to utils Signed-off-by: Jason Dillaman --- src/tools/rbd_mirror/ImageReplayer.cc | 36 ++++++++------------ src/tools/rbd_mirror/ImageReplayer.h | 6 ++-- src/tools/rbd_mirror/image_replayer/Utils.cc | 11 ++++++ src/tools/rbd_mirror/image_replayer/Utils.h | 6 ++++ 4 files changed, 34 insertions(+), 25 deletions(-) diff --git a/src/tools/rbd_mirror/ImageReplayer.cc b/src/tools/rbd_mirror/ImageReplayer.cc index 42ef9560618..8bed3fc28be 100644 --- a/src/tools/rbd_mirror/ImageReplayer.cc +++ b/src/tools/rbd_mirror/ImageReplayer.cc @@ -29,6 +29,7 @@ #include "tools/rbd_mirror/image_replayer/CloseImageRequest.h" #include "tools/rbd_mirror/image_replayer/PrepareLocalImageRequest.h" #include "tools/rbd_mirror/image_replayer/PrepareRemoteImageRequest.h" +#include "tools/rbd_mirror/image_replayer/Utils.h" #include "tools/rbd_mirror/image_replayer/journal/EventPreprocessor.h" #include "tools/rbd_mirror/image_replayer/journal/ReplayStatusFormatter.h" @@ -273,7 +274,8 @@ ImageReplayer::ImageReplayer( // name. When the image name becomes known on start the asok commands will be // re-registered using "remote_pool_name/remote_image_name" name. - m_name = admin_socket_hook_name(global_image_id); + m_image_spec = image_replayer::util::compute_image_spec( + local_io_ctx, global_image_id); register_admin_socket_hook(); } @@ -974,7 +976,7 @@ void ImageReplayer::print_status(Formatter *f) std::lock_guard l{m_lock}; f->open_object_section("image_replayer"); - f->dump_string("name", m_name); + f->dump_string("name", m_image_spec); f->dump_string("state", to_string(m_state)); f->close_section(); } @@ -1734,16 +1736,18 @@ void ImageReplayer::register_admin_socket_hook() { ceph_assert(m_perf_counters == nullptr); - dout(15) << "registered asok hook: " << m_name << dendl; - asok_hook = new ImageReplayerAdminSocketHook(g_ceph_context, m_name, - this); + dout(15) << "registered asok hook: " << m_image_spec << dendl; + asok_hook = new ImageReplayerAdminSocketHook( + g_ceph_context, m_image_spec, this); int r = asok_hook->register_commands(); if (r == 0) { m_asok_hook = asok_hook; CephContext *cct = static_cast(m_local_io_ctx.cct()); - auto prio = cct->_conf.get_val("rbd_mirror_image_perf_stats_prio"); - PerfCountersBuilder plb(g_ceph_context, "rbd_mirror_image_" + m_name, + auto prio = cct->_conf.get_val( + "rbd_mirror_image_perf_stats_prio"); + PerfCountersBuilder plb(g_ceph_context, + "rbd_mirror_image_" + m_image_spec, l_rbd_mirror_first, l_rbd_mirror_last); plb.add_u64_counter(l_rbd_mirror_replay, "replay", "Replays", "r", prio); plb.add_u64_counter(l_rbd_mirror_replay_bytes, "replay_bytes", @@ -1783,27 +1787,17 @@ void ImageReplayer::reregister_admin_socket_hook() { { std::lock_guard locker{m_lock}; - auto name = admin_socket_hook_name(m_local_image_name); - if (m_asok_hook != nullptr && m_name == name) { + auto image_spec = image_replayer::util::compute_image_spec( + m_local_io_ctx, m_local_image_name); + if (m_asok_hook != nullptr && m_image_spec == image_spec) { return; } - m_name = name; + m_image_spec = image_spec; } unregister_admin_socket_hook(); register_admin_socket_hook(); } -template -std::string ImageReplayer::admin_socket_hook_name( - const std::string &image_name) const { - std::string name = m_local_io_ctx.get_namespace(); - if (!name.empty()) { - name += "/"; - } - - return m_local_io_ctx.get_pool_name() + "/" + name + image_name; -} - template std::ostream &operator<<(std::ostream &os, const ImageReplayer &replayer) { diff --git a/src/tools/rbd_mirror/ImageReplayer.h b/src/tools/rbd_mirror/ImageReplayer.h index f121f02e53e..03b200730ab 100644 --- a/src/tools/rbd_mirror/ImageReplayer.h +++ b/src/tools/rbd_mirror/ImageReplayer.h @@ -100,7 +100,7 @@ public: bool is_running() { std::lock_guard l{m_lock}; return is_running_(); } bool is_replaying() { std::lock_guard l{m_lock}; return is_replaying_(); } - std::string get_name() { std::lock_guard l{m_lock}; return m_name; }; + std::string get_name() { std::lock_guard l{m_lock}; return m_image_spec; }; void set_state_description(int r, const std::string &desc); // TODO temporary until policy handles release of image replayers @@ -298,7 +298,7 @@ private: std::string m_local_image_id; std::string m_local_image_name; - std::string m_name; + std::string m_image_spec; mutable ceph::mutex m_lock; State m_state = STATE_STOPPED; @@ -445,8 +445,6 @@ private: void register_admin_socket_hook(); void unregister_admin_socket_hook(); void reregister_admin_socket_hook(); - - std::string admin_socket_hook_name(const std::string &image_name) const; }; } // namespace mirror diff --git a/src/tools/rbd_mirror/image_replayer/Utils.cc b/src/tools/rbd_mirror/image_replayer/Utils.cc index eda0179f29d..55162a4e4b5 100644 --- a/src/tools/rbd_mirror/image_replayer/Utils.cc +++ b/src/tools/rbd_mirror/image_replayer/Utils.cc @@ -2,6 +2,7 @@ // vim: ts=8 sw=2 smarttab #include "tools/rbd_mirror/image_replayer/Utils.h" +#include "include/rados/librados.hpp" #include "common/debug.h" #include "common/errno.h" #include "cls/journal/cls_journal_types.h" @@ -18,6 +19,16 @@ namespace mirror { namespace image_replayer { namespace util { +std::string compute_image_spec(librados::IoCtx& io_ctx, + const std::string& image_name) { + std::string name = io_ctx.get_namespace(); + if (!name.empty()) { + name += "/"; + } + + return io_ctx.get_pool_name() + "/" + name + image_name; +} + bool decode_client_meta(const cls::journal::Client& client, librbd::journal::MirrorPeerClientMeta* client_meta) { dout(15) << dendl; diff --git a/src/tools/rbd_mirror/image_replayer/Utils.h b/src/tools/rbd_mirror/image_replayer/Utils.h index d42146d150f..6c5352cd151 100644 --- a/src/tools/rbd_mirror/image_replayer/Utils.h +++ b/src/tools/rbd_mirror/image_replayer/Utils.h @@ -4,6 +4,9 @@ #ifndef RBD_MIRROR_IMAGE_REPLAYER_UTILS_H #define RBD_MIRROR_IMAGE_REPLAYER_UTILS_H +#include "include/rados/librados_fwd.hpp" +#include + namespace cls { namespace journal { struct Client; } } namespace librbd { namespace journal { struct MirrorPeerClientMeta; } } @@ -12,6 +15,9 @@ namespace mirror { namespace image_replayer { namespace util { +std::string compute_image_spec(librados::IoCtx& io_ctx, + const std::string& image_name); + bool decode_client_meta(const cls::journal::Client& client, librbd::journal::MirrorPeerClientMeta* client_meta); -- 2.47.3