]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/tools/rbd_mirror/Mirror.cc
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / tools / rbd_mirror / Mirror.cc
index 144386cb47a7be706cc6aad2bb60bd7812efaef3..ef18a0b66bbd62180a1e4c0e2902ef29197154d2 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_msgf("unexpected signal %d", signum);
   }
 }
 
@@ -292,6 +310,8 @@ void Mirror::print_status(Formatter *f, stringstream *ss)
 
   if (f) {
     f->close_section();
+    f->close_section();
+    f->flush(*ss);
   }
 }