summaryrefslogtreecommitdiffstats
path: root/xlators/mgmt/glusterd/src/glusterd-quotad-svc.c
diff options
context:
space:
mode:
authoranand <anekkunt@redhat.com>2015-05-20 19:52:11 +0530
committerAtin Mukherjee <amukherj@redhat.com>2015-08-06 23:22:53 -0700
commit7255febab2c38cc89b71f2519a20d10f53586000 (patch)
treeca60d73af2f7566a226b24d3fc9e017a363c66e7 /xlators/mgmt/glusterd/src/glusterd-quotad-svc.c
parent7298b622ab39c2e78d6d745ae8b6e8413e1d9f1a (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-quotad-svc.c')
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-quotad-svc.c82
1 files changed, 63 insertions, 19 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-quotad-svc.c b/xlators/mgmt/glusterd/src/glusterd-quotad-svc.c
index 59a76711054..f3475a3f0ec 100644
--- a/xlators/mgmt/glusterd/src/glusterd-quotad-svc.c
+++ b/xlators/mgmt/glusterd/src/glusterd-quotad-svc.c
@@ -15,6 +15,7 @@
#include "glusterd-volgen.h"
#include "glusterd-quotad-svc.h"
#include "glusterd-messages.h"
+#include "glusterd-svc-helper.h"
char *quotad_svc_name = "quotad";
@@ -36,13 +37,6 @@ int glusterd_quotadsvc_init (glusterd_svc_t *svc)
if (ret)
goto out;
- /* glusterd_svc_build_volfile_path () doesn't put correct quotad volfile
- * path in proc object at service initialization. Re-initialize
- * the correct path
- */
- glusterd_quotadsvc_build_volfile_path (quotad_svc_name, conf->workdir,
- volfile, sizeof (volfile));
- snprintf (svc->proc.volfile, sizeof (svc->proc.volfile), "%s", volfile);
out:
return ret;
}
@@ -53,8 +47,8 @@ glusterd_quotadsvc_create_volfile ()
char filepath[PATH_MAX] = {0,};
glusterd_conf_t *conf = THIS->private;
- glusterd_quotadsvc_build_volfile_path (quotad_svc_name, conf->workdir,
- filepath, sizeof (filepath));
+ glusterd_svc_build_volfile_path (quotad_svc_name, conf->workdir,
+ filepath, sizeof (filepath));
return glusterd_create_global_volfile (build_quotad_graph,
filepath, NULL);
}
@@ -162,17 +156,67 @@ out:
int
glusterd_quotadsvc_reconfigure ()
{
- return glusterd_svc_reconfigure (glusterd_quotadsvc_create_volfile);
-}
+ int ret = -1;
+ xlator_t *this = NULL;
+ glusterd_conf_t *priv = NULL;
+ gf_boolean_t identical = _gf_false;
-void
-glusterd_quotadsvc_build_volfile_path (char *server, char *workdir,
- char *volfile, size_t len)
-{
- char dir[PATH_MAX] = {0,};
+ this = THIS;
+ GF_VALIDATE_OR_GOTO (this->name, this, out);
+
+ priv = this->private;
+ GF_VALIDATE_OR_GOTO (this->name, priv, out);
+
+ if (glusterd_all_volumes_with_quota_stopped ())
+ 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->quotad_svc.name,
+ build_quotad_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->quotad_svc.name,
+ build_quotad_graph,
+ &identical);
+ if (ret)
+ goto out;
- GF_ASSERT (len == PATH_MAX);
+ /* Topology is not changed, but just the options. But write the
+ * options to quotad volfile, so that quotad will be reconfigured.
+ */
+ if (identical) {
+ ret = glusterd_quotadsvc_create_volfile ();
+ if (ret == 0) {/* Only if above PASSES */
+ ret = glusterd_fetchspec_notify (THIS);
+ }
+ goto out;
+ }
+manager:
+ /*
+ * quotad volfile's topology has been changed. quotad server needs
+ * to be RESTARTED to ACT on the changed volfile.
+ */
+ ret = priv->quotad_svc.manager (&(priv->quotad_svc), NULL,
+ PROC_START_NO_WAIT);
- glusterd_svc_build_svcdir (server, workdir, dir, sizeof (dir));
- snprintf (volfile, len, "%s/%s.vol", dir, server);
+out:
+ gf_msg_debug (this->name, 0, "Returning %d", ret);
+ return ret;
}