diff options
author | anand <anekkunt@redhat.com> | 2015-05-20 19:52:11 +0530 |
---|---|---|
committer | Atin Mukherjee <amukherj@redhat.com> | 2015-08-06 23:22:53 -0700 |
commit | 7255febab2c38cc89b71f2519a20d10f53586000 (patch) | |
tree | ca60d73af2f7566a226b24d3fc9e017a363c66e7 /xlators/mgmt/glusterd/src/glusterd-bitd-svc.c | |
parent | 7298b622ab39c2e78d6d745ae8b6e8413e1d9f1a (diff) |
glusterd: Stop/restart/notify to daemons(svcs) during reset/set on a volume
problem : Reset/set commands were not working properly. reset command returns
success but it not sending notification to svcs if corresponding graph modified.
Fix: Whenever reset/set command issued, generate the temp graph and compare
with original graph and do the fallowing actions
1.) If both graph are identical nothing to do with svcs.
2.) If any changes in graph topology restart/stop service by calling
svc manager.
3) If changes in options send notify signal by calling glusterd_fetchspec_notify.
Change-Id: I852c4602eafed1ae6e6a02424814fe3a83e3d4c7
BUG: 1209329
Signed-off-by: anand <anekkunt@redhat.com>
Reviewed-on: http://review.gluster.org/10850
Tested-by: NetBSD Build System <jenkins@build.gluster.org>
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd-bitd-svc.c')
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-bitd-svc.c | 64 |
1 files changed, 63 insertions, 1 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-bitd-svc.c b/xlators/mgmt/glusterd/src/glusterd-bitd-svc.c index 6b606f874b5..ee96ccbff80 100644 --- a/xlators/mgmt/glusterd/src/glusterd-bitd-svc.c +++ b/xlators/mgmt/glusterd/src/glusterd-bitd-svc.c @@ -14,6 +14,7 @@ #include "glusterd-utils.h" #include "glusterd-volgen.h" #include "glusterd-bitd-svc.h" +#include "glusterd-svc-helper.h" void glusterd_bitdsvc_build (glusterd_svc_t *svc) @@ -141,5 +142,66 @@ glusterd_bitdsvc_stop (glusterd_svc_t *svc, int sig) int glusterd_bitdsvc_reconfigure () { - return glusterd_svc_reconfigure (glusterd_bitdsvc_create_volfile); + int ret = -1; + xlator_t *this = NULL; + glusterd_conf_t *priv = NULL; + gf_boolean_t identical = _gf_false; + + this = THIS; + GF_VALIDATE_OR_GOTO (this->name, this, out); + + priv = this->private; + GF_VALIDATE_OR_GOTO (this->name, priv, out); + + if (glusterd_should_i_stop_bitd ()) + goto manager; + /* + * Check both OLD and NEW volfiles, if they are SAME by size + * and cksum i.e. "character-by-character". If YES, then + * NOTHING has been changed, just return. + */ + ret = glusterd_svc_check_volfile_identical (priv->bitd_svc.name, + build_bitd_graph, + &identical); + if (ret) + goto out; + if (identical) { + ret = 0; + goto out; + } + + /* + * They are not identical. Find out if the topology is changed + * OR just the volume options. If just the options which got + * changed, then inform the xlator to reconfigure the options. + */ + identical = _gf_false; /* RESET the FLAG */ + ret = glusterd_svc_check_topology_identical (priv->bitd_svc.name, + build_bitd_graph, + &identical); + if (ret) + goto out; /*not able to compare due to some corruption */ + + /* Topology is not changed, but just the options. But write the + * options to bitd volfile, so that bitd will be reconfigured. + */ + if (identical) { + ret = glusterd_bitdsvc_create_volfile (); + if (ret == 0) {/* Only if above PASSES */ + ret = glusterd_fetchspec_notify (THIS); + } + goto out; + } + +manager: + /* + * bitd volfile's topology has been changed. bitd server needs + * to be RESTARTED to ACT on the changed volfile. + */ + ret = priv->bitd_svc.manager (&(priv->bitd_svc), NULL, + PROC_START_NO_WAIT); + +out: + gf_msg_debug (this->name, 0, "Returning %d", ret); + return ret; } |