diff options
author | Mohit Agrawal <moagrawa@redhat.com> | 2017-05-08 19:29:22 +0530 |
---|---|---|
committer | Atin Mukherjee <amukherj@redhat.com> | 2017-05-09 01:30:01 +0000 |
commit | 21c7f7baccfaf644805e63682e5a7d2a9864a1e6 (patch) | |
tree | 01bbbd50d13f609eb8f7d2cbe2ce5e3af1652e42 /libglusterfs/src/common-utils.c | |
parent | 18e07cf01f975c80152e5469fb4e4274f08dc636 (diff) | |
download | glusterfs-21c7f7baccfaf644805e63682e5a7d2a9864a1e6.tar.gz glusterfs-21c7f7baccfaf644805e63682e5a7d2a9864a1e6.tar.xz glusterfs-21c7f7baccfaf644805e63682e5a7d2a9864a1e6.zip |
glusterd: socketfile & pidfile related fixes for brick multiplexing feature
Problem: While brick-muliplexing is on after restarting glusterd, CLI is
not showing pid of all brick processes in all volumes.
Solution: While brick-mux is on all local brick process communicated through one
UNIX socket but as per current code (glusterd_brick_start) it is trying
to communicate with separate UNIX socket for each volume which is populated
based on brick-name and vol-name.Because of multiplexing design only one
UNIX socket is opened so it is throwing poller error and not able to
fetch correct status of brick process through cli process.
To resolve the problem write a new function glusterd_set_socket_filepath_for_mux
that will call by glusterd_brick_start to validate about the existence of socketpath.
To avoid the continuous EPOLLERR erros in logs update socket_connect code.
Test: To reproduce the issue followed below steps
1) Create two distributed volumes(dist1 and dist2)
2) Set cluster.brick-multiplex is on
3) kill glusterd
4) run command gluster v status
After apply the patch it shows correct pid for all volumes
BUG: 1444596
Change-Id: I5d10af69dea0d0ca19511f43870f34295a54a4d2
Signed-off-by: Mohit Agrawal <moagrawa@redhat.com>
Reviewed-on: https://review.gluster.org/17101
Smoke: Gluster Build System <jenkins@build.gluster.org>
Reviewed-by: Prashanth Pai <ppai@redhat.com>
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
Diffstat (limited to 'libglusterfs/src/common-utils.c')
-rw-r--r-- | libglusterfs/src/common-utils.c | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/libglusterfs/src/common-utils.c b/libglusterfs/src/common-utils.c index 2acd83f36c..6ea4fd1437 100644 --- a/libglusterfs/src/common-utils.c +++ b/libglusterfs/src/common-utils.c @@ -3633,6 +3633,24 @@ gf_skip_header_section (int fd, int header_len) return ret; } +/* Below function is use to check at runtime if pid is running */ + +gf_boolean_t +gf_is_pid_running (int pid) +{ + char fname[32] = {0,}; + + snprintf(fname, sizeof(fname), "/proc/%d/cmdline", pid); + + if (sys_access (fname , R_OK) != 0) { + return _gf_false; + } + + return _gf_true; + +} + + gf_boolean_t gf_is_service_running (char *pidfile, int *pid) { @@ -3661,15 +3679,7 @@ gf_is_service_running (char *pidfile, int *pid) *pid = -1; } - if (!*pid) { - /* - * PID 0 means we've started the process, but it hasn't gotten - * far enough to put in a real PID yet. More details are in - * glusterd_brick_start. - */ - running = _gf_true; - } - + running = gf_is_pid_running (*pid); out: if (file) fclose (file); |