diff options
author | Csaba Henk <csaba@lowlife.hu> | 2011-04-02 19:40:49 +0000 |
---|---|---|
committer | Vijay Bellur <vijay@dev.gluster.com> | 2011-04-04 08:02:27 -0700 |
commit | 01b3dff29adee2041b0ef1b374eda8c88fb07678 (patch) | |
tree | c8f6c7eabb962c97f3e88add716eda429e2c3567 /xlators/mgmt | |
parent | e77c35248e8ce796bc5b108c10013089a0c65bde (diff) |
syncdaemon: add monitor mode to support autorestart
Signed-off-by: Csaba Henk <csaba@gluster.com>
Signed-off-by: Vijay Bellur <vijay@dev.gluster.com>
BUG: 2537 (gsync autorestart)
URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2537
Diffstat (limited to 'xlators/mgmt')
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-op-sm.c | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-op-sm.c b/xlators/mgmt/glusterd/src/glusterd-op-sm.c index f8e043e46d6..0ae4f93e359 100644 --- a/xlators/mgmt/glusterd/src/glusterd-op-sm.c +++ b/xlators/mgmt/glusterd/src/glusterd-op-sm.c @@ -3599,6 +3599,7 @@ stop_gsync (char *master, char *slave, char **op_errstr) FILE *file = NULL; char pidfile[PATH_MAX] = {0,}; char buf [1024] = {0,}; + int i = 0; ret = gsync_status (master, slave, &status); if (ret == 0 && status == -1) { @@ -3632,14 +3633,25 @@ stop_gsync (char *master, char *slave, char **op_errstr) ret = read (fileno(file), buf, 1024); if (ret > 0) { pid = strtol (buf, NULL, 10); - ret = kill (pid, SIGTERM); + ret = kill (-pid, SIGTERM); if (ret) { gf_log ("", GF_LOG_WARNING, "failed to stop gsyncd"); goto out; } - sleep (0.1); - kill (pid, SIGTERM); + for (i = 0; i < 20; i++) { + if (gsync_status (master, slave, &status) == -1 || + status == -1) { + /* monitor gsyncd is dead but worker may + * still be alive, give some more time + * before SIGKILL (hack) + */ + sleep (0.05); + break; + } + sleep (0.05); + } + kill (-pid, SIGKILL); unlink (pidfile); } ret = 0; |