diff options
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd-handler.c')
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-handler.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-handler.c b/xlators/mgmt/glusterd/src/glusterd-handler.c index 7686fe050bc..6e4bfdc420b 100644 --- a/xlators/mgmt/glusterd/src/glusterd-handler.c +++ b/xlators/mgmt/glusterd/src/glusterd-handler.c @@ -5982,8 +5982,10 @@ __glusterd_brick_rpc_notify (struct rpc_clnt *rpc, void *mydata, glusterd_volinfo_t *volinfo = NULL; xlator_t *this = NULL; int temp = 0; + int32_t pid = -1; glusterd_brickinfo_t *brickinfo_tmp = NULL; glusterd_brick_proc_t *brick_proc = NULL; + char pidfile[PATH_MAX] = {0}; brickid = mydata; if (!brickid) @@ -6082,6 +6084,29 @@ __glusterd_brick_rpc_notify (struct rpc_clnt *rpc, void *mydata, "peer=%s;volume=%s;brick=%s", brickinfo->hostname, volinfo->volname, brickinfo->path); + /* 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 + */ + GLUSTERD_GET_BRICK_PIDFILE (pidfile, volinfo, + brickinfo, conf); + if (!gf_is_service_running (pidfile, &pid)) { + ret = pmap_registry_remove ( + THIS, brickinfo->port, + brickinfo->path, + GF_PMAP_PORT_BRICKSERVER, + NULL, _gf_true); + if (ret) { + gf_msg (this->name, GF_LOG_WARNING, + GD_MSG_PMAP_REGISTRY_REMOVE_FAIL, + 0, "Failed to remove pmap " + "registry for port %d for " + "brick %s", brickinfo->port, + brickinfo->path); + ret = 0; + } + } } if (is_brick_mx_enabled()) { |