mirror of
https://github.com/ceph/ceph
synced 2024-12-21 19:02:10 +00:00
Merge pull request #1671 from ceph/wip-7699
mds: Fix respawn (add path resolution) Reviewed-by: Greg Farnum <greg@inktank.com> Reviewed-by: Sage Weil <sage@inktank.com>
This commit is contained in:
commit
b0338ca361
@ -749,6 +749,9 @@ void MDS::handle_command(MMonCommand *m)
|
||||
else if (m->cmd[0] == "exit") {
|
||||
suicide();
|
||||
}
|
||||
else if (m->cmd[0] == "respawn") {
|
||||
respawn();
|
||||
}
|
||||
else if (m->cmd[0] == "session" && m->cmd[1] == "kill") {
|
||||
Session *session = sessionmap.get_session(entity_name_t(CEPH_ENTITY_TYPE_CLIENT,
|
||||
strtol(m->cmd[2].c_str(), 0, 10)));
|
||||
@ -1696,13 +1699,25 @@ void MDS::respawn()
|
||||
}
|
||||
new_argv[orig_argc] = NULL;
|
||||
|
||||
char buf[PATH_MAX];
|
||||
char *cwd = getcwd(buf, sizeof(buf));
|
||||
assert(cwd);
|
||||
dout(1) << " cwd " << cwd << dendl;
|
||||
/* Determine the path to our executable, try to read
|
||||
* linux-specific /proc/ path first */
|
||||
char exe_path[PATH_MAX];
|
||||
ssize_t exe_path_bytes = readlink("/proc/self/exe", exe_path, sizeof(exe_path));
|
||||
if (exe_path_bytes == -1) {
|
||||
/* Print CWD for the user's interest */
|
||||
char buf[PATH_MAX];
|
||||
char *cwd = getcwd(buf, sizeof(buf));
|
||||
assert(cwd);
|
||||
dout(1) << " cwd " << cwd << dendl;
|
||||
|
||||
/* Fall back to a best-effort: just running in our CWD */
|
||||
strncpy(exe_path, orig_argv[0], sizeof(exe_path));
|
||||
}
|
||||
|
||||
dout(1) << " exe_path " << exe_path << dendl;
|
||||
|
||||
unblock_all_signals(NULL);
|
||||
execv(orig_argv[0], new_argv);
|
||||
execv(exe_path, new_argv);
|
||||
|
||||
dout(0) << "respawn execv " << orig_argv[0]
|
||||
<< " failed with " << cpp_strerror(errno) << dendl;
|
||||
|
Loading…
Reference in New Issue
Block a user