]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
cephfs-mirror: use preforker for daemonizing
authorVenky Shankar <vshankar@redhat.com>
Mon, 1 Feb 2021 04:41:43 +0000 (23:41 -0500)
committerVenky Shankar <vshankar@redhat.com>
Tue, 23 Feb 2021 06:19:46 +0000 (01:19 -0500)
Signed-off-by: Venky Shankar <vshankar@redhat.com>
(cherry picked from commit bb81fd3f9dcb676e7ae3b3a692cc67b921559a6e)

src/tools/cephfs_mirror/main.cc

index 2301cb7ef48fdde1b9690b0357f6ceb45c6f93c7..aceb57bdbb5e418a0b660d2af30b67e98de04aed 100644 (file)
@@ -6,6 +6,7 @@
 #include "common/debug.h"
 #include "common/errno.h"
 #include "common/async/context_pool.h"
+#include "common/Preforker.h"
 #include "global/global_init.h"
 #include "global/signal_handler.h"
 #include "mon/MonClient.h"
@@ -47,12 +48,32 @@ int main(int argc, const char **argv) {
                          CODE_ENVIRONMENT_DAEMON,
                          CINIT_FLAG_UNPRIVILEGED_DAEMON_DEFAULTS);
 
-  if (g_conf()->daemonize) {
-    global_init_daemonize(g_ceph_context);
+  Preforker forker;
+  if (global_init_prefork(g_ceph_context) >= 0) {
+    std::string err;
+    int r = forker.prefork(err);
+    if (r < 0) {
+      cerr << err << std::endl;
+      return r;
+    }
+    if (forker.is_parent()) {
+      g_ceph_context->_log->start();
+      if (forker.parent_wait(err) != 0) {
+        return -ENXIO;
+      }
+      return 0;
+    }
+    global_init_postfork_start(g_ceph_context);
   }
 
   common_init_finish(g_ceph_context);
 
+  bool daemonize = g_conf().get_val<bool>("daemonize");
+  if (daemonize) {
+    global_init_postfork_finish(g_ceph_context);
+    forker.daemonize();
+  }
+
   init_async_signal_handler();
   register_async_signal_handler_oneshot(SIGINT, handle_signal);
   register_async_signal_handler_oneshot(SIGTERM, handle_signal);
@@ -95,5 +116,5 @@ cleanup_messenger:
   unregister_async_signal_handler(SIGTERM, handle_signal);
   shutdown_async_signal_handler();
 
-  return r < 0 ? EXIT_SUCCESS : EXIT_FAILURE;
+  return forker.signal_exit(r);
 }