From: Venky Shankar Date: Wed, 16 Sep 2020 04:34:56 +0000 (-0400) Subject: cephfs-mirror: record failed FSMirror instances X-Git-Tag: v16.1.0~786^2~7 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=28320a458ecc55ad37afd5cf0fe78bec511af0a3;p=ceph.git cephfs-mirror: record failed FSMirror instances Signed-off-by: Venky Shankar --- diff --git a/src/tools/cephfs_mirror/FSMirror.cc b/src/tools/cephfs_mirror/FSMirror.cc index a0bae498be12..e6563bdd1c47 100644 --- a/src/tools/cephfs_mirror/FSMirror.cc +++ b/src/tools/cephfs_mirror/FSMirror.cc @@ -268,8 +268,8 @@ void FSMirror::init_instance_watcher(Context *on_finish) { dout(20) << dendl; m_on_init_finish = new LambdaContext([this, on_finish](int r) { - if (r == 0 ) { - init_replayers(); + if (r < 0) { + m_init_failed = true; } on_finish->complete(r); if (m_on_shutdown_finish != nullptr) { @@ -420,14 +420,18 @@ void FSMirror::remove_peer(const Peer &peer) { void FSMirror::mirror_status(Formatter *f) { std::scoped_lock locker(m_lock); f->open_object_section("status"); - f->open_object_section("peers"); - for ([[maybe_unused]] auto &[peer, peer_replayer] : m_peer_replayers) { - peer.dump(f); + if (m_init_failed) { + f->dump_string("state", "failed"); + } else { + f->open_object_section("peers"); + for ([[maybe_unused]] auto &[peer, peer_replayer] : m_peer_replayers) { + peer.dump(f); + } + f->close_section(); // peers + f->open_object_section("snap_dirs"); + f->dump_int("dir_count", m_directories.size()); + f->close_section(); // snap_dirs } - f->close_section(); // peers - f->open_object_section("snap_dirs"); - f->dump_int("dir_count", m_directories.size()); - f->close_section(); // snap_dirs f->close_section(); // status } diff --git a/src/tools/cephfs_mirror/FSMirror.h b/src/tools/cephfs_mirror/FSMirror.h index 575fa9c6cd15..d5584497a630 100644 --- a/src/tools/cephfs_mirror/FSMirror.h +++ b/src/tools/cephfs_mirror/FSMirror.h @@ -37,6 +37,11 @@ public: return m_stopping; } + bool is_failed() { + std::scoped_lock locker(m_lock); + return m_init_failed; + } + // admin socket helpers void mirror_status(Formatter *f);