diff options
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-op-sm.c | 37 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-utils.c | 159 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-utils.h | 4 |
3 files changed, 67 insertions, 133 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-op-sm.c b/xlators/mgmt/glusterd/src/glusterd-op-sm.c index 4d5fb05e162..ce05c92eae2 100644 --- a/xlators/mgmt/glusterd/src/glusterd-op-sm.c +++ b/xlators/mgmt/glusterd/src/glusterd-op-sm.c @@ -1876,10 +1876,7 @@ rb_kill_destination_brick (glusterd_volinfo_t *volinfo, glusterd_brickinfo_t *dst_brickinfo) { glusterd_conf_t *priv = NULL; - int ret = -1; char pidfile[PATH_MAX] = {0,}; - pid_t pid = -1; - FILE *file = NULL; priv = THIS->private; @@ -1887,39 +1884,7 @@ rb_kill_destination_brick (glusterd_volinfo_t *volinfo, priv->workdir, volinfo->volname, RB_DSTBRICK_PIDFILE); - file = fopen (pidfile, "r+"); - if (!file) { - gf_log ("", GF_LOG_ERROR, "Unable to open pidfile: %s", - pidfile); - ret = -1; - goto out; - } - - ret = fscanf (file, "%d", &pid); - if (ret <= 0) { - gf_log ("", GF_LOG_ERROR, "Unable to read pidfile: %s", - pidfile); - ret = -1; - goto out; - } - - fclose (file); - file = NULL; - - gf_log ("", GF_LOG_NORMAL, "Stopping glusterfs running in pid: %d", - pid); - - ret = kill (pid, SIGQUIT); - - if (ret) { - gf_log ("", GF_LOG_ERROR, "Unable to kill pid %d", pid); - goto out; - } - - ret = 0; - -out: - return ret; + return glusterd_service_stop ("brick", pidfile, SIGQUIT, _gf_true); } static int diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c index ed4d7a32796..30ba5141628 100644 --- a/xlators/mgmt/glusterd/src/glusterd-utils.c +++ b/xlators/mgmt/glusterd/src/glusterd-utils.c @@ -767,6 +767,66 @@ glusterd_volinfo_find (char *volname, glusterd_volinfo_t **volinfo) } +int32_t +glusterd_service_stop(const char *service, char *pidfile, int sig, + gf_boolean_t keep_pidfile) +{ + int32_t ret = -1; + pid_t pid = -1; + FILE *file = NULL; + + file = fopen (pidfile, "r+"); + + if (!file) { + gf_log ("", GF_LOG_ERROR, "Unable to open pidfile: %s", + pidfile); + if (errno == ENOENT) { + gf_log ("",GF_LOG_TRACE, "%s may not be running", + service); + ret = 0; + goto out; + } + ret = -1; + goto out; + } + + ret = fscanf (file, "%d", &pid); + if (ret <= 0) { + gf_log ("", GF_LOG_ERROR, "Unable to read pidfile: %s", + pidfile); + ret = -1; + goto out; + } + fclose (file); + file = NULL; + + gf_log ("", GF_LOG_NORMAL, "Stopping gluster %s running in pid: %d", + service, pid); + + ret = kill (pid, sig); + + if (ret) { + gf_log ("", GF_LOG_ERROR, "Unable to kill pid %d", pid); + goto out; + } + + if (keep_pidfile) + goto out; + + ret = unlink (pidfile); + + if (ret && (ENOENT != errno)) { + gf_log ("", GF_LOG_ERROR, "Unable to unlink pidfile: %s", + pidfile); + goto out; + } + + ret = 0; +out: + if (file) + fclose (file); + return ret; +} int32_t glusterd_volume_start_glusterfs (glusterd_volinfo_t *volinfo, @@ -841,13 +901,10 @@ glusterd_volume_stop_glusterfs (glusterd_volinfo_t *volinfo, glusterd_brickinfo_t *brickinfo, int32_t count) { - int32_t ret = -1; xlator_t *this = NULL; glusterd_conf_t *priv = NULL; char pidfile[PATH_MAX] = {0,}; char path[PATH_MAX] = {0,}; - pid_t pid = -1; - FILE *file = NULL; GF_ASSERT (volinfo); GF_ASSERT (brickinfo); @@ -861,55 +918,7 @@ glusterd_volume_stop_glusterfs (glusterd_volinfo_t *volinfo, GLUSTERD_GET_BRICK_PIDFILE (pidfile, path, brickinfo->hostname, brickinfo->path); - file = fopen (pidfile, "r+"); - - if (!file) { - gf_log ("", GF_LOG_ERROR, "Unable to open pidfile: %s", - pidfile); - if (errno == ENOENT) { - gf_log ("",GF_LOG_TRACE, "volume may not be running"); - ret = 0; - goto out; - } - ret = -1; - goto out; - } - - ret = fscanf (file, "%d", &pid); - if (ret <= 0) { - gf_log ("", GF_LOG_ERROR, "Unable to read pidfile: %s", - pidfile); - ret = -1; - goto out; - } - fclose (file); - file = NULL; - - gf_log ("", GF_LOG_NORMAL, "Stopping glusterfs running in pid: %d", - pid); - - ret = kill (pid, SIGTERM); - - if (ret) { - gf_log ("", GF_LOG_ERROR, "Unable to kill pid %d", pid); - goto out; - } - - //pmap_registry_remove (THIS, brickinfo->port, brickinfo->path); - - ret = unlink (pidfile); - - if (ret && (ENOENT != errno)) { - gf_log ("", GF_LOG_ERROR, "Unable to unlink pidfile: %s", - pidfile); - goto out; - } - - ret = 0; -out: - if (file) - fclose (file); - return ret; + return glusterd_service_stop ("brick", pidfile, SIGTERM, _gf_false); } int32_t @@ -1618,13 +1627,10 @@ out: int32_t glusterd_nfs_server_stop () { - int32_t ret = -1; xlator_t *this = NULL; glusterd_conf_t *priv = NULL; char pidfile[PATH_MAX] = {0,}; char path[PATH_MAX] = {0,}; - pid_t pid = -1; - FILE *file = NULL; this = THIS; GF_ASSERT(this); @@ -1634,48 +1640,7 @@ glusterd_nfs_server_stop () GLUSTERD_GET_NFS_DIR(path, priv); GLUSTERD_GET_NFS_PIDFILE(pidfile); - file = fopen (pidfile, "r+"); - - if (!file) { - gf_log ("", GF_LOG_ERROR, "Unable to open pidfile: %s", - pidfile); - ret = -1; - goto out; - } - - ret = fscanf (file, "%d", &pid); - if (ret <= 0) { - gf_log ("", GF_LOG_ERROR, "Unable to read pidfile: %s", - pidfile); - ret = -1; - goto out; - } - fclose (file); - file = NULL; - - gf_log ("", GF_LOG_NORMAL, "Stopping glusterfs running in pid: %d", - pid); - - ret = kill (pid, SIGTERM); - - if (ret) { - gf_log ("", GF_LOG_ERROR, "Unable to kill pid %d", pid); - goto out; - } - - ret = unlink (pidfile); - - if (ret && (ENOENT != errno)) { - gf_log ("", GF_LOG_ERROR, "Unable to unlink pidfile: %s", - pidfile); - goto out; - } - - ret = 0; -out: - if (file) - fclose (file); - return ret; + return glusterd_service_stop ("nfsd", pidfile, SIGTERM, _gf_false); } gf_boolean_t diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.h b/xlators/mgmt/glusterd/src/glusterd-utils.h index 19ca43fa190..a74fa871faf 100644 --- a/xlators/mgmt/glusterd/src/glusterd-utils.h +++ b/xlators/mgmt/glusterd/src/glusterd-utils.h @@ -91,6 +91,10 @@ int32_t glusterd_volinfo_find (char *volname, glusterd_volinfo_t **volinfo); int32_t +glusterd_service_stop(const char *service, char *pidfile, int sig, + gf_boolean_t keep_pidfile); + +int32_t glusterd_resolve_brick (glusterd_brickinfo_t *brickinfo); int32_t |