]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
cephfs-mirror: reopen logs on SIGHUP
authorVenky Shankar <vshankar@redhat.com>
Wed, 23 Jun 2021 06:59:13 +0000 (02:59 -0400)
committerVenky Shankar <vshankar@redhat.com>
Thu, 24 Jun 2021 04:58:41 +0000 (00:58 -0400)
Signed-off-by: Venky Shankar <vshankar@redhat.com>
src/tools/cephfs_mirror/FSMirror.cc
src/tools/cephfs_mirror/FSMirror.h
src/tools/cephfs_mirror/Mirror.cc
src/tools/cephfs_mirror/Mirror.h
src/tools/cephfs_mirror/PeerReplayer.cc
src/tools/cephfs_mirror/PeerReplayer.h
src/tools/cephfs_mirror/main.cc

index d18a1563fbea642e522413431956e5a1d32881fd..76dcc11f6c6b71364e6b333fbe80d79bfe33a931 100644 (file)
@@ -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<CephContext *>(m_cluster->cct())->reopen_logs();
+  }
+  for (auto &[peer, replayer] : m_peer_replayers) {
+    replayer->reopen_logs();
+  }
+}
+
 void FSMirror::init(Context *on_finish) {
   dout(20) << dendl;
 
index e598cd12d5dc52491f1aea34820d08f59914b4a8..bae5a38e1b53cb93b70d546631e2be18f34d26f8 100644 (file)
@@ -70,6 +70,8 @@ public:
   // admin socket helpers
   void mirror_status(Formatter *f);
 
+  void reopen_logs();
+
 private:
   bool is_blocklisted(const std::scoped_lock<ceph::mutex> &locker) const {
     bool blocklisted = false;
index 9389c77f1cf82aed5afaf50b302b97f594740a49..a4d7742df0f08c6ae0d4dcb3ac4ae896e07db3ad 100644 (file)
@@ -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,
index 2e50a2a8bdbdcf28077f10bdfe7f4962efbaaedd..f0ffdd51625625dfb41be76110254a5f973d2573 100644 (file)
@@ -130,6 +130,8 @@ private:
 
   void schedule_mirror_update_task();
   void update_fs_mirrors();
+
+  void reopen_logs();
 };
 
 } // namespace mirror
index ac0b10ba54caae1fb180549b57260e5a0dbdb7a4..6c2e6ee5b884ccb7092e72609cd870d3bc85e152 100644 (file)
@@ -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<CephContext *>(m_remote_cluster->cct())->reopen_logs();
+  }
+}
+
 } // namespace mirror
 } // namespace cephfs
index ff78db836eda4abc059f2e80eeed0f83ef1a35be..f32064278695427b4da09f119d7f027dea6b321c 100644 (file)
@@ -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";
 
index f23e1992456402cad02e8e5b2f16c0efa697c569..efaa89c35931e6cd72b1869c16d13fa548523160 100644 (file)
@@ -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();