From 8e0bf30dc40fed45078c702dec750b5e8bbf5734 Mon Sep 17 00:00:00 2001 From: Gaurav Kumar Garg Date: Thu, 2 Jul 2015 18:23:51 +0530 Subject: glusterd: stop all the daemons services on peer detach Currently glusterd is not stopping all the deamon service on peer detach With this fix it will do peer detach cleanup properlly and will stop all the daemon which was running before peer detach on the node. Change-Id: Ifed403ed09187e84f2a60bf63135156ad1f15775 BUG: 1255386 Signed-off-by: Gaurav Kumar Garg Reviewed-on: http://review.gluster.org/11509 Tested-by: NetBSD Build System Tested-by: Gluster Build System Reviewed-by: Atin Mukherjee --- xlators/mgmt/glusterd/src/glusterd-sm.c | 40 ++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 15 deletions(-) (limited to 'xlators/mgmt/glusterd/src/glusterd-sm.c') diff --git a/xlators/mgmt/glusterd/src/glusterd-sm.c b/xlators/mgmt/glusterd/src/glusterd-sm.c index 0455c54964a..ce2110aef61 100644 --- a/xlators/mgmt/glusterd/src/glusterd-sm.c +++ b/xlators/mgmt/glusterd/src/glusterd-sm.c @@ -31,6 +31,7 @@ #include "glusterd-op-sm.h" #include "glusterd-utils.h" #include "glusterd-store.h" +#include "glusterd-svc-helper.h" #include "glusterd-snapshot-utils.h" #include "glusterd-server-quorum.h" @@ -596,17 +597,29 @@ out: /* Clean up stale volumes on the peer being detached. The volumes which have * bricks on other peers are stale with respect to the detached peer. */ -static int +static void glusterd_peer_detach_cleanup (glusterd_conf_t *priv) { - int ret = -1; - glusterd_volinfo_t *volinfo = NULL; + int ret = -1; + glusterd_volinfo_t *volinfo = NULL; glusterd_volinfo_t *tmp_volinfo = NULL; + glusterd_svc_t *svc = NULL; GF_ASSERT (priv); cds_list_for_each_entry_safe (volinfo, tmp_volinfo, &priv->volumes, vol_list) { + /* 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."); + } + } + /* The peer detach checks make sure that, at this point in the * detach process, there are only volumes contained completely * within or completely outside the detached peer. @@ -623,14 +636,17 @@ glusterd_peer_detach_cleanup (glusterd_conf_t *priv) gf_msg (THIS->name, GF_LOG_ERROR, 0, GD_MSG_STALE_VOL_REMOVE_FAIL, "Error deleting stale volume"); - goto out; } } } - ret = 0; -out: - gf_msg_debug (THIS->name, 0, "Returning %d", ret); - return ret; + + /* Stop all daemon services of Detaching node once peer detached */ + ret = glusterd_svcs_stop (); + if (ret) { + gf_msg (THIS->name, GF_LOG_ERROR, 0, + GD_MSG_SVC_STOP_FAIL, + "Failed to stop all daemon services."); + } } static int @@ -675,13 +691,7 @@ glusterd_ac_handle_friend_remove_req (glusterd_friend_sm_event_t *event, } rcu_read_unlock (); - ret = glusterd_peer_detach_cleanup (priv); - if (ret) { - gf_msg (THIS->name, GF_LOG_WARNING, 0, - GD_MSG_PEER_DETACH_CLEANUP_FAIL, - "Peer detach cleanup was not successful"); - ret = 0; - } + glusterd_peer_detach_cleanup (priv); out: if (new_event) GF_FREE (new_event->peername); -- cgit