]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rbd-mirror: reopen all contexts logs on SIGHUP
authorMykola Golub <mgolub@suse.com>
Tue, 31 Dec 2019 09:57:15 +0000 (09:57 +0000)
committerMykola Golub <mgolub@suse.com>
Fri, 10 Jan 2020 18:48:57 +0000 (20:48 +0200)
Signed-off-by: Mykola Golub <mgolub@suse.com>
(cherry picked from commit 9ddf111506611a596c713ffe861a41aeda05e7a5)

Conflicts:
src/tools/rbd_mirror/Mirror.cc (std::lock_guard vs Mutex::Locker, ceph_abort_msgf does not exist)
src/tools/rbd_mirror/PoolReplayer.cc (std::lock_guard vs Mutex::Locker, PoolReplayer is not a template)

src/tools/rbd_mirror/Mirror.cc
src/tools/rbd_mirror/PoolReplayer.cc
src/tools/rbd_mirror/PoolReplayer.h
src/tools/rbd_mirror/main.cc

index 61dc9bf2d89c7615ac4a148949ebc24a8bb9904c..4ba547eeb1a07b908e032b539fe17b4b2f20257a 100644 (file)
@@ -1,6 +1,8 @@
 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
 // vim: ts=8 sw=2 smarttab
 
+#include <signal.h>
+
 #include <boost/range/adaptor/map.hpp>
 
 #include "common/Formatter.h"
@@ -216,10 +218,26 @@ Mirror::~Mirror()
 
 void Mirror::handle_signal(int signum)
 {
-  m_stopping = true;
-  {
-    Mutex::Locker l(m_lock);
+  dout(20) << signum << dendl;
+
+  Mutex::Locker l(m_lock);
+
+  switch (signum) {
+  case SIGHUP:
+    for (auto &it : m_pool_replayers) {
+      it.second->reopen_logs();
+    }
+    g_ceph_context->reopen_logs();
+    break;
+
+  case SIGINT:
+  case SIGTERM:
+    m_stopping = true;
     m_cond.Signal();
+    break;
+
+  default:
+    ceph_abort();
   }
 }
 
index f48c1bc913b2ac3fbbc2aa3f23fc88b99ee8c83b..26e568140a1020e43de5c0e00fadc08e5cd093bf 100644 (file)
@@ -254,6 +254,8 @@ bool PoolReplayer::is_running() const {
 
 void PoolReplayer::init()
 {
+  Mutex::Locker l(m_lock);
+
   assert(!m_pool_replayer_thread.is_started());
 
   // reset state
@@ -513,6 +515,18 @@ void PoolReplayer::run()
   m_instance_replayer->stop();
 }
 
+void PoolReplayer::reopen_logs()
+{
+  Mutex::Locker l(m_lock);
+
+  if (m_local_rados) {
+    reinterpret_cast<CephContext *>(m_local_rados->cct())->reopen_logs();
+  }
+  if (m_remote_rados) {
+    reinterpret_cast<CephContext *>(m_remote_rados->cct())->reopen_logs();
+  }
+}
+
 void PoolReplayer::print_status(Formatter *f, stringstream *ss)
 {
   dout(20) << "enter" << dendl;
index 9a581756d5e44e415213fd1e55ac7e046338866f..cf657dc097d96075c085c4ec4493e6d0edd6296d 100644 (file)
@@ -64,6 +64,7 @@ public:
   void restart();
   void flush();
   void release_leader();
+  void reopen_logs();
 
 private:
   struct PoolWatcherListener : public PoolWatcher<>::Listener {
index a423555eac9a0d1832cb60a66b61092f11514eba..bb3b0cd42ad6100830553cce9f31c904c783ad2e 100644 (file)
@@ -54,7 +54,7 @@ int main(int argc, const char **argv)
   common_init_finish(g_ceph_context);
 
   init_async_signal_handler();
-  register_async_signal_handler(SIGHUP, sighup_handler);
+  register_async_signal_handler(SIGHUP, handle_signal);
   register_async_signal_handler_oneshot(SIGINT, handle_signal);
   register_async_signal_handler_oneshot(SIGTERM, handle_signal);
 
@@ -74,7 +74,7 @@ int main(int argc, const char **argv)
   mirror->run();
 
  cleanup:
-  unregister_async_signal_handler(SIGHUP, sighup_handler);
+  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();