From: Venky Shankar Date: Wed, 23 Jun 2021 06:59:13 +0000 (-0400) Subject: cephfs-mirror: reopen logs on SIGHUP X-Git-Tag: v17.1.0~1541^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=68ad416766e2c73109dbf44f179d1b85b9d61994;p=ceph.git cephfs-mirror: reopen logs on SIGHUP Signed-off-by: Venky Shankar --- diff --git a/src/tools/cephfs_mirror/FSMirror.cc b/src/tools/cephfs_mirror/FSMirror.cc index d18a1563fbea..76dcc11f6c6b 100644 --- a/src/tools/cephfs_mirror/FSMirror.cc +++ b/src/tools/cephfs_mirror/FSMirror.cc @@ -136,6 +136,17 @@ void FSMirror::cleanup() { m_cluster.reset(); } +void FSMirror::reopen_logs() { + std::scoped_lock locker(m_lock); + + if (m_cluster) { + reinterpret_cast(m_cluster->cct())->reopen_logs(); + } + for (auto &[peer, replayer] : m_peer_replayers) { + replayer->reopen_logs(); + } +} + void FSMirror::init(Context *on_finish) { dout(20) << dendl; diff --git a/src/tools/cephfs_mirror/FSMirror.h b/src/tools/cephfs_mirror/FSMirror.h index e598cd12d5dc..bae5a38e1b53 100644 --- a/src/tools/cephfs_mirror/FSMirror.h +++ b/src/tools/cephfs_mirror/FSMirror.h @@ -70,6 +70,8 @@ public: // admin socket helpers void mirror_status(Formatter *f); + void reopen_logs(); + private: bool is_blocklisted(const std::scoped_lock &locker) const { bool blocklisted = false; diff --git a/src/tools/cephfs_mirror/Mirror.cc b/src/tools/cephfs_mirror/Mirror.cc index 9389c77f1cf8..a4d7742df0f0 100644 --- a/src/tools/cephfs_mirror/Mirror.cc +++ b/src/tools/cephfs_mirror/Mirror.cc @@ -284,16 +284,32 @@ int Mirror::init(std::string &reason) { void Mirror::shutdown() { dout(20) << dendl; - - std::unique_lock locker(m_lock); m_stopping = true; m_cond.notify_all(); } +void Mirror::reopen_logs() { + for (auto &[filesystem, mirror_action] : m_mirror_actions) { + mirror_action.fs_mirror->reopen_logs(); + } + g_ceph_context->reopen_logs(); +} + void Mirror::handle_signal(int signum) { dout(10) << ": signal=" << signum << dendl; - ceph_assert(signum == SIGTERM || signum == SIGINT); - shutdown(); + + std::scoped_lock locker(m_lock); + switch (signum) { + case SIGHUP: + reopen_logs(); + break; + case SIGINT: + case SIGTERM: + shutdown(); + break; + default: + ceph_abort_msgf("unexpected signal %d", signum); + } } void Mirror::handle_enable_mirroring(const Filesystem &filesystem, diff --git a/src/tools/cephfs_mirror/Mirror.h b/src/tools/cephfs_mirror/Mirror.h index 2e50a2a8bdbd..f0ffdd516256 100644 --- a/src/tools/cephfs_mirror/Mirror.h +++ b/src/tools/cephfs_mirror/Mirror.h @@ -130,6 +130,8 @@ private: void schedule_mirror_update_task(); void update_fs_mirrors(); + + void reopen_logs(); }; } // namespace mirror diff --git a/src/tools/cephfs_mirror/PeerReplayer.cc b/src/tools/cephfs_mirror/PeerReplayer.cc index ac0b10ba54ca..6c2e6ee5b884 100644 --- a/src/tools/cephfs_mirror/PeerReplayer.cc +++ b/src/tools/cephfs_mirror/PeerReplayer.cc @@ -1540,5 +1540,13 @@ void PeerReplayer::peer_status(Formatter *f) { f->close_section(); // stats } +void PeerReplayer::reopen_logs() { + std::scoped_lock locker(m_lock); + + if (m_remote_cluster) { + reinterpret_cast(m_remote_cluster->cct())->reopen_logs(); + } +} + } // namespace mirror } // namespace cephfs diff --git a/src/tools/cephfs_mirror/PeerReplayer.h b/src/tools/cephfs_mirror/PeerReplayer.h index ff78db836eda..f32064278695 100644 --- a/src/tools/cephfs_mirror/PeerReplayer.h +++ b/src/tools/cephfs_mirror/PeerReplayer.h @@ -39,6 +39,9 @@ public: // admin socket helpers void peer_status(Formatter *f); + // reopen logs + void reopen_logs(); + private: inline static const std::string PRIMARY_SNAP_ID_KEY = "primary_snap_id"; diff --git a/src/tools/cephfs_mirror/main.cc b/src/tools/cephfs_mirror/main.cc index f23e19924564..efaa89c35931 100644 --- a/src/tools/cephfs_mirror/main.cc +++ b/src/tools/cephfs_mirror/main.cc @@ -77,6 +77,7 @@ int main(int argc, const char **argv) { } init_async_signal_handler(); + register_async_signal_handler(SIGHUP, handle_signal); register_async_signal_handler_oneshot(SIGINT, handle_signal); register_async_signal_handler_oneshot(SIGTERM, handle_signal); @@ -114,6 +115,7 @@ cleanup_messenger: msgr->wait(); delete msgr; + unregister_async_signal_handler(SIGHUP, handle_signal); unregister_async_signal_handler(SIGINT, handle_signal); unregister_async_signal_handler(SIGTERM, handle_signal); shutdown_async_signal_handler();