From 7f3814513bd9a91c61fc2c62ebc3d0eda6dae430 Mon Sep 17 00:00:00 2001 From: Venky Shankar Date: Tue, 29 Sep 2020 00:27:49 -0400 Subject: [PATCH] cephfs-mirror: enclose json dump in object section So that mirroring module can decode the JSON object. Signed-off-by: Venky Shankar --- src/tools/cephfs_mirror/FSMirror.cc | 2 +- src/tools/cephfs_mirror/FSMirror.h | 5 +++++ src/tools/cephfs_mirror/MirrorWatcher.cc | 9 ++++++--- src/tools/cephfs_mirror/MirrorWatcher.h | 10 ++++++---- 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/tools/cephfs_mirror/FSMirror.cc b/src/tools/cephfs_mirror/FSMirror.cc index 710fa97907df3..c3d5a9202f3a5 100644 --- a/src/tools/cephfs_mirror/FSMirror.cc +++ b/src/tools/cephfs_mirror/FSMirror.cc @@ -309,7 +309,7 @@ void FSMirror::init_mirror_watcher() { std::scoped_lock locker(m_lock); Context *ctx = new C_CallbackAdapter< FSMirror, &FSMirror::handle_init_mirror_watcher>(this); - m_mirror_watcher = MirrorWatcher::create(m_ioctx, m_addrs, m_work_queue); + m_mirror_watcher = MirrorWatcher::create(m_ioctx, this, m_work_queue); m_mirror_watcher->init(ctx); } diff --git a/src/tools/cephfs_mirror/FSMirror.h b/src/tools/cephfs_mirror/FSMirror.h index 67714c8013d1d..7605529ca0f77 100644 --- a/src/tools/cephfs_mirror/FSMirror.h +++ b/src/tools/cephfs_mirror/FSMirror.h @@ -52,6 +52,11 @@ public: return m_all_peers; } + std::string get_instance_addr() { + std::scoped_lock locker(m_lock); + return m_addrs; + } + // admin socket helpers void mirror_status(Formatter *f); diff --git a/src/tools/cephfs_mirror/MirrorWatcher.cc b/src/tools/cephfs_mirror/MirrorWatcher.cc index 4c4ffc0292aff..f3e4e377b2c3a 100644 --- a/src/tools/cephfs_mirror/MirrorWatcher.cc +++ b/src/tools/cephfs_mirror/MirrorWatcher.cc @@ -10,6 +10,7 @@ #include "msg/Messenger.h" #include "aio_utils.h" #include "MirrorWatcher.h" +#include "FSMirror.h" #include "Types.h" #define dout_context g_ceph_context @@ -20,11 +21,11 @@ namespace cephfs { namespace mirror { -MirrorWatcher::MirrorWatcher(librados::IoCtx &ioctx, std::string_view addrs, +MirrorWatcher::MirrorWatcher(librados::IoCtx &ioctx, FSMirror *fs_mirror, ContextWQ *work_queue) : Watcher(ioctx, CEPHFS_MIRROR_OBJECT, work_queue), m_ioctx(ioctx), - m_addrs(addrs), + m_fs_mirror(fs_mirror), m_work_queue(work_queue), m_lock(ceph::make_mutex("cephfs::mirror::mirror_watcher")), m_instance_id(stringify(m_ioctx.get_instance_id())) { @@ -76,7 +77,9 @@ void MirrorWatcher::handle_notify(uint64_t notify_id, uint64_t handle, dout(20) << dendl; JSONFormatter f; - f.dump_string("addr", m_addrs); + f.open_object_section("info"); + encode_json("addr", m_fs_mirror->get_instance_addr(), &f); + f.close_section(); bufferlist outbl; f.flush(outbl); diff --git a/src/tools/cephfs_mirror/MirrorWatcher.h b/src/tools/cephfs_mirror/MirrorWatcher.h index ef427a8bb782a..1d6cbef013e1d 100644 --- a/src/tools/cephfs_mirror/MirrorWatcher.h +++ b/src/tools/cephfs_mirror/MirrorWatcher.h @@ -17,6 +17,8 @@ class Messenger; namespace cephfs { namespace mirror { +class FSMirror; + // watch for notifications via cephfs_mirror object (in metadata // pool). this is used sending keepalived with keepalive payload // being the rados instance address (used by the manager module @@ -24,12 +26,12 @@ namespace mirror { class MirrorWatcher : public Watcher { public: - static MirrorWatcher *create(librados::IoCtx &ioctx, std::string_view addrs, + static MirrorWatcher *create(librados::IoCtx &ioctx, FSMirror *fs_mirror, ContextWQ *work_queue) { - return new MirrorWatcher(ioctx, addrs, work_queue); + return new MirrorWatcher(ioctx, fs_mirror, work_queue); } - MirrorWatcher(librados::IoCtx &ioctx, std::string_view addrs, + MirrorWatcher(librados::IoCtx &ioctx, FSMirror *fs_mirror, ContextWQ *work_queue); ~MirrorWatcher(); @@ -47,7 +49,7 @@ public: private: librados::IoCtx &m_ioctx; - std::string m_addrs; + FSMirror *m_fs_mirror; ContextWQ *m_work_queue; ceph::mutex m_lock; -- 2.39.5