diff options
author | Gaurav Kumar Garg <garg.gaurav52@gmail.com> | 2015-12-01 19:14:08 +0530 |
---|---|---|
committer | Atin Mukherjee <amukherj@redhat.com> | 2015-12-03 03:28:04 -0800 |
commit | cae9512d60f5715459ea5883c657c679197982d9 (patch) | |
tree | 7417c3ee36bff7a0dd474c84b79c5c9ccc7fc8c4 /xlators/mgmt/glusterd/src/glusterd-utils.c | |
parent | 93f31189ce8f6e2980a39b02568ed17088e0a667 (diff) |
glusterd: stop daemon services upon peer detach correctly
Problem:
Currently glusterd is stopping all the daemons service upon peer detach.
If user have multi node cluster and if user want to detach any node
from the cluster, and detached node having stand alone volume then upon
detaching glusterd stopping all the daemon's of the detached node,
which is having running volume.
Fix:
Upon peer detach it should do peer detach cleanup properly and it should
stop only those daemon on the node on which it require.
Change-Id: I98b8099166f82e235ded6d02261f59a6511a003b
BUG: 1287455
Signed-off-by: Gaurav Kumar Garg <ggarg@redhat.com>
Reviewed-on: http://review.gluster.org/12838
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
Tested-by: NetBSD Build System <jenkins@build.gluster.org>
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd-utils.c')
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-utils.c | 31 |
1 files changed, 27 insertions, 4 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c index 461a6047dff..1c32201202a 100644 --- a/xlators/mgmt/glusterd/src/glusterd-utils.c +++ b/xlators/mgmt/glusterd/src/glusterd-utils.c @@ -6869,10 +6869,11 @@ glusterd_friend_contains_vol_bricks (glusterd_volinfo_t *volinfo, int glusterd_friend_remove_cleanup_vols (uuid_t uuid) { - int ret = -1; - glusterd_conf_t *priv = NULL; - glusterd_volinfo_t *volinfo = NULL; - glusterd_volinfo_t *tmp_volinfo = NULL; + int ret = -1; + glusterd_conf_t *priv = NULL; + glusterd_svc_t *svc = NULL; + glusterd_volinfo_t *volinfo = NULL; + glusterd_volinfo_t *tmp_volinfo = NULL; priv = THIS->private; GF_ASSERT (priv); @@ -6891,6 +6892,28 @@ glusterd_friend_remove_cleanup_vols (uuid_t uuid) goto out; } } + + if (!glusterd_friend_contains_vol_bricks (volinfo, + MY_UUID)) { + /*Stop snapd daemon service if snapd daemon is running*/ + if (!volinfo->is_snap_volume) { + svc = &(volinfo->snapd.svc); + ret = svc->stop (svc, SIGTERM); + if (ret) { + gf_msg (THIS->name, GF_LOG_ERROR, 0, + GD_MSG_SVC_STOP_FAIL, "Failed " + "to stop snapd daemon service"); + } + } + } + } + + /* Reconfigure all daemon services upon peer detach */ + ret = glusterd_svcs_reconfigure (); + if (ret) { + gf_msg (THIS->name, GF_LOG_ERROR, 0, + GD_MSG_SVC_STOP_FAIL, + "Failed to reconfigure all daemon services."); } ret = 0; out: |