#include "msg/SimpleMessenger.h"
#include "common/Timer.h"
-#include "global/global_init.h"
#include "common/ceph_argparse.h"
+#include "global/global_init.h"
+#include "global/signal_handler.h"
+
#include "include/color.h"
#include "common/errno.h"
#include "common/pick_address.h"
#include "perfglue/heap_profiler.h"
+OSD *osd = NULL;
+
+void handle_osd_signal(int signum)
+{
+ if (osd)
+ osd->handle_signal(signum);
+}
+
void usage()
{
derr << "usage: ceph-osd -i osdid [--osd-data=path] [--osd-journal=path] "
return -1;
global_init_chdir(g_ceph_context);
- OSD *osd = new OSD(whoami, cluster_messenger, client_messenger,
- messenger_hbin, messenger_hbout,
- &mc,
- g_conf->osd_data, g_conf->osd_journal);
+ osd = new OSD(whoami, cluster_messenger, client_messenger,
+ messenger_hbin, messenger_hbout,
+ &mc,
+ g_conf->osd_data, g_conf->osd_journal);
err = osd->pre_init();
if (err < 0) {
derr << TEXT_RED << " ** ERROR: initializing osd failed: " << cpp_strerror(-err)
messenger_hbout->start();
cluster_messenger->start();
+ // install signal handlers
+ init_async_signal_handler();
+ register_async_signal_handler(SIGHUP, sighup_handler);
+ register_async_signal_handler_oneshot(SIGINT, handle_osd_signal);
+ register_async_signal_handler_oneshot(SIGTERM, handle_osd_signal);
+
// start osd
err = osd->init();
if (err < 0) {