]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
cephfs-mirror: enclose json dump in object section
authorVenky Shankar <vshankar@redhat.com>
Tue, 29 Sep 2020 04:27:49 +0000 (00:27 -0400)
committerVenky Shankar <vshankar@redhat.com>
Tue, 12 Jan 2021 10:56:52 +0000 (05:56 -0500)
So that mirroring module can decode the JSON object.

Signed-off-by: Venky Shankar <vshankar@redhat.com>
src/tools/cephfs_mirror/FSMirror.cc
src/tools/cephfs_mirror/FSMirror.h
src/tools/cephfs_mirror/MirrorWatcher.cc
src/tools/cephfs_mirror/MirrorWatcher.h

index 710fa97907df3ab033746392148adb54c446c975..c3d5a9202f3a5690b26750ea226aee74b3ddbbe5 100644 (file)
@@ -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);
 }
 
index 67714c8013d1da7cdd3c5a02a7ae8ae12e016552..7605529ca0f77f628bcc3d989509da527aea2ba0 100644 (file)
@@ -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);
 
index 4c4ffc0292affaaa355c41011b2d6003caed34af..f3e4e377b2c3a82a986ba97c4d1cff3e8df4dd50 100644 (file)
@@ -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
 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);
index ef427a8bb782ab230abd07310be3cccb44485516..1d6cbef013e1d9be2efd04c3999fea55dbb551e5 100644 (file)
@@ -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;