summaryrefslogtreecommitdiffstats
path: root/xlators/mgmt/glusterd/src
diff options
context:
space:
mode:
authorKrishnan Parthasarathi <kp@gluster.com>2011-10-31 15:54:52 +0530
committerVijay Bellur <vijay@gluster.com>2011-11-18 04:22:25 -0800
commit1e652740f74298637577e9861cb5092091404d29 (patch)
treedc2a50ba794396b493c57e0c8b244ba2543a4b55 /xlators/mgmt/glusterd/src
parentc5be0df9149155f9e23a8e9f24d0becb0543efe1 (diff)
glusterd: Extended glusterd_is_service_running to get svcs's pid.
Also, volume status cmd would print "N/A" if pid couldn't be retrieved from pidfile. Change-Id: Ie83d228b1cf86397d181885b325e337a403e6ed2 BUG: 3043 Reviewed-on: http://review.gluster.com/650 Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Amar Tumballi <amar@gluster.com> Reviewed-by: Vijay Bellur <vijay@gluster.com>
Diffstat (limited to 'xlators/mgmt/glusterd/src')
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-utils.c61
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-utils.h3
2 files changed, 18 insertions, 46 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c
index 1e797a88200..2eaf4f4a2f4 100644
--- a/xlators/mgmt/glusterd/src/glusterd-utils.c
+++ b/xlators/mgmt/glusterd/src/glusterd-utils.c
@@ -2308,12 +2308,13 @@ out:
return ret;
}
+/* Valid only in if service is 'local' to glusterd.
+ * pid can be -1, if reading pidfile failed */
gf_boolean_t
-glusterd_is_service_running (char *pidfile)
+glusterd_is_service_running (char *pidfile, int *pid)
{
FILE *file = NULL;
gf_boolean_t running = _gf_false;
- gf_boolean_t locked = _gf_false;
int ret = 0;
int fno = 0;
@@ -2322,20 +2323,20 @@ glusterd_is_service_running (char *pidfile)
goto out;
fno = fileno (file);
- ret = lockf (fno, F_TLOCK, 0);
- if (!ret) {
- locked = _gf_true;
+ ret = lockf (fno, F_TEST, 0);
+ if (ret == -1)
+ running = _gf_true;
+ if (!pid)
goto out;
+
+ ret = fscanf (file, "%d", pid);
+ if (ret <= 0) {
+ gf_log ("", GF_LOG_ERROR, "Unable to read pidfile: %s, %s",
+ pidfile, strerror (errno));
+ *pid = -1;
}
- running = _gf_true;
out:
- if (locked) {
- GF_ASSERT (file);
- if (lockf (fno, F_ULOCK, 0) < 0)
- gf_log ("", GF_LOG_WARNING, "Cannot unlock pidfile: %s"
- " reason: %s", pidfile, strerror(errno));
- }
if (file)
fclose (file);
return running;
@@ -2586,7 +2587,7 @@ glusterd_is_nodesvc_running (char *server)
glusterd_get_nodesvc_pidfile (server, priv->workdir,
pidfile, sizeof (pidfile));
- return glusterd_is_service_running (pidfile);
+ return glusterd_is_service_running (pidfile, NULL);
}
int32_t
@@ -3094,8 +3095,6 @@ glusterd_add_brick_to_dict (glusterd_volinfo_t *volinfo,
char base_key[8192] = {0};
char pidfile[PATH_MAX] = {0};
char path[PATH_MAX] = {0};
- FILE *file = NULL;
- int fd = -1;
int32_t pid = -1;
int32_t brick_online = -1;
xlator_t *this = NULL;
@@ -3128,39 +3127,12 @@ glusterd_add_brick_to_dict (glusterd_volinfo_t *volinfo,
if (ret)
goto out;
-
GLUSTERD_GET_VOLUME_DIR (path, volinfo, priv);
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);
- /* pidfile doesn't exist means brick is down*/
- pid = 0;
- brick_online = 0;
- goto cont;
- } else {
- ret = fscanf (file, "%d", &pid);
- if (ret <= 0) {
- gf_log ("", GF_LOG_ERROR, "Unable to read pidfile: %s",
- pidfile);
- ret = -1;
- goto out;
- }
-
- /* check if process is crashed*/
- fd = fileno (file);
- if ((fd != -1) && (lockf (fd, F_TEST, 0)))
- brick_online = 1;
- else {
- pid = 0;
- brick_online = 0;
- }
- }
+ brick_online = glusterd_is_service_running (pidfile, &pid);
-cont:
memset (key, 0, sizeof (key));
snprintf (key, sizeof (key), "%s.pid", base_key);
ret = dict_set_int32 (dict, key, pid);
@@ -3174,9 +3146,6 @@ cont:
goto out;
out:
- if (file)
- fclose (file);
-
if (ret)
gf_log ("", GF_LOG_DEBUG, "Returning %d", ret);
diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.h b/xlators/mgmt/glusterd/src/glusterd-utils.h
index 8401b61bc16..a34956b0c4a 100644
--- a/xlators/mgmt/glusterd/src/glusterd-utils.h
+++ b/xlators/mgmt/glusterd/src/glusterd-utils.h
@@ -154,6 +154,9 @@ glusterd_get_nodesvc_volfile (char *server, char *workdir,
char *volfile, size_t len);
gf_boolean_t
+glusterd_is_service_running (char *pidfile, int *pid);
+
+gf_boolean_t
glusterd_is_nodesvc_running ();
gf_boolean_t