From: Venky Shankar Date: Tue, 29 Sep 2020 04:27:49 +0000 (-0400) Subject: cephfs-mirror: enclose json dump in object section X-Git-Tag: v16.1.0~51^2~11 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=7f3814513bd9a91c61fc2c62ebc3d0eda6dae430;p=ceph.git cephfs-mirror: enclose json dump in object section So that mirroring module can decode the JSON object. Signed-off-by: Venky Shankar --- diff --git a/src/tools/cephfs_mirror/FSMirror.cc b/src/tools/cephfs_mirror/FSMirror.cc index 710fa97907df..c3d5a9202f3a 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 67714c8013d1..7605529ca0f7 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 4c4ffc0292af..f3e4e377b2c3 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 ef427a8bb782..1d6cbef013e1 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;