]> git.apps.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:59:07 +0000 (20:59 +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)

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 bc8de0103e84970cd00e0305b97348a5c07b0eec..eb5532211bc127b66d0ca9b6e82b4d5fb5c0f253 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"
@@ -217,10 +219,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 e9c3991970dbe19481e4b728347501c5ee75e511..995fdc2bda6d1fc5e5280761b3d7af4f35b82d66 100644 (file)
@@ -270,6 +270,8 @@ bool PoolReplayer<I>::is_running() const {
 template <typename I>
 void PoolReplayer<I>::init()
 {
+  Mutex::Locker l(m_lock);
+
   assert(!m_pool_replayer_thread.is_started());
 
   // reset state
@@ -534,6 +536,19 @@ void PoolReplayer<I>::run()
   m_instance_replayer->stop();
 }
 
+template <typename I>
+void PoolReplayer<I>::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();
+  }
+}
+
 template <typename I>
 void PoolReplayer<I>::print_status(Formatter *f, stringstream *ss)
 {
index e15d183725f11fa2c7038888e1f68fc7c4a3b542..fc162949afc489ffc1284b5096210e7006da1aa7 100644 (file)
@@ -69,6 +69,7 @@ public:
   void restart();
   void flush();
   void release_leader();
+  void reopen_logs();
 
 private:
   /**
index 84d7a9de6a46f3bb8239ddfde8dd279a23dda3c2..8bc86d73f00d26b7aa5e8071c3ed02a4f0157b92 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();