summaryrefslogtreecommitdiffstats
path: root/xlators
diff options
context:
space:
mode:
authorMohit Agrawal <moagrawal@redhat.com>2018-11-06 16:23:51 +0530
committerAmar Tumballi <amarts@redhat.com>2018-11-12 03:31:57 +0000
commitbcf1e8b07491b48c5372924dbbbad5b8391c6d81 (patch)
treee25b709aac97c9bdee74596c37f2aa721a0b7bc3 /xlators
parente134ef2493e8517a6f341416c11230c2bb5bcd6c (diff)
core: Portmap entries showing stale brick entries when bricks are down
Problem: pmap is showing stale brick entries after down the brick because of glusterd_brick_rpc_notify call gf_is_service_running before call pmap_registry_remove to ensure about brick instance. Solutiom: 1) Change the condition in gf_is_pid_running to ensure about process existence, use open instead of access to achieve the same 2) Call search_brick_path_from_proc in __glusterd_brick_rpc_notify along with gf_is_service_running Change-Id: Ia663ac61c01fdee6c12f47c0300cdf93f19b6a19 fixes: bz#1646892 Signed-off-by: Mohit Agrawal <moagrawal@redhat.com>
Diffstat (limited to 'xlators')
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-handler.c7
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-utils.h2
2 files changed, 7 insertions, 2 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-handler.c b/xlators/mgmt/glusterd/src/glusterd-handler.c
index aa8892784df..ba69a7de7be 100644
--- a/xlators/mgmt/glusterd/src/glusterd-handler.c
+++ b/xlators/mgmt/glusterd/src/glusterd-handler.c
@@ -6206,10 +6206,13 @@ __glusterd_brick_rpc_notify(struct rpc_clnt *rpc, void *mydata,
/* In case of an abrupt shutdown of a brick PMAP_SIGNOUT
* event is not received by glusterd which can lead to a
* stale port entry in glusterd, so forcibly clean up
- * the same if the process is not running
+ * the same if the process is not running sometime
+ * gf_is_service_running true so to ensure about brick instance
+ * call search_brick_path_from_proc
*/
GLUSTERD_GET_BRICK_PIDFILE(pidfile, volinfo, brickinfo, conf);
- if (!gf_is_service_running(pidfile, &pid)) {
+ if (!gf_is_service_running(pidfile, &pid) ||
+ !search_brick_path_from_proc(pid, brickinfo->path)) {
ret = pmap_registry_remove(
THIS, brickinfo->port, brickinfo->path,
GF_PMAP_PORT_BRICKSERVER, NULL, _gf_true);
diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.h b/xlators/mgmt/glusterd/src/glusterd-utils.h
index cffbebda70c..a00dc4564a5 100644
--- a/xlators/mgmt/glusterd/src/glusterd-utils.h
+++ b/xlators/mgmt/glusterd/src/glusterd-utils.h
@@ -873,4 +873,6 @@ glusterd_get_volinfo_from_brick(char *brick, glusterd_volinfo_t **volinfo);
gf_boolean_t
glusterd_is_profile_on(glusterd_volinfo_t *volinfo);
+char *
+search_brick_path_from_proc(pid_t brick_pid, char *brickpath);
#endif