So that mirroring module can decode the JSON object.
Signed-off-by: Venky Shankar <vshankar@redhat.com>
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);
}
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);
#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())) {
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);
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
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();
private:
librados::IoCtx &m_ioctx;
- std::string m_addrs;
+ FSMirror *m_fs_mirror;
ContextWQ *m_work_queue;
ceph::mutex m_lock;