From: Sage Weil Date: Thu, 7 Oct 2010 14:52:50 +0000 (-0700) Subject: mds: respawn (instead of suicide) on being marked down X-Git-Tag: v0.22~40 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=f10906b3fdb720ef822478c7221836d67becef2b;p=ceph.git 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 --- diff --git a/src/cmds.cc b/src/cmds.cc index 549790d513c4..e4e8375bad49 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 49969668d589..41d893a72e42 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