From f10906b3fdb720ef822478c7221836d67becef2b Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 7 Oct 2010 07:52:50 -0700 Subject: [PATCH] mds: respawn (instead of suicide) on being marked down This makes temporarily laggy daemons will restart and rejoin the cluster in standby mode. Signed-off-by: Sage Weil --- src/cmds.cc | 5 +++++ src/mds/MDS.cc | 26 ++++++++++++++++++++++++-- src/mds/MDS.h | 4 ++++ 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/cmds.cc b/src/cmds.cc index 549790d513c4d..e4e8375bad490 100644 --- a/src/cmds.cc +++ b/src/cmds.cc @@ -107,6 +107,11 @@ int main(int argc, const char **argv) // start mds MDS *mds = new MDS(g_conf.id, messenger, &mc); + + // in case we have to respawn... + mds->orig_argc = argc; + mds->orig_argv = argv; + mds->init(); messenger->wait(); diff --git a/src/mds/MDS.cc b/src/mds/MDS.cc index 49969668d5894..41d893a72e429 100644 --- a/src/mds/MDS.cc +++ b/src/mds/MDS.cc @@ -87,6 +87,9 @@ MDS::MDS(const char *n, Messenger *m, MonClient *mc) : logclient(messenger, &mc->monmap, mc), sessionmap(this) { + orig_argc = 0; + orig_argv = NULL; + last_tid = 0; monc->set_messenger(messenger); @@ -814,8 +817,8 @@ void MDS::handle_mds_map(MMDSMap *m) dout(10) << "not in map yet" << dendl; } else { dout(1) << "handle_mds_map i (" << addr - << ") dne in the mdsmap, killing myself" << dendl; - suicide(); + << ") dne in the mdsmap, respawning myself" << dendl; + respawn(); } goto out; } @@ -1344,6 +1347,25 @@ void MDS::suicide() monc->shutdown(); } +void MDS::respawn() +{ + dout(1) << "respawn" << dendl; + + char *new_argv[orig_argc+1]; + dout(1) << " e: '" << orig_argv[0] << "'" << dendl; + for (int i=0; i