diff options
author | anand <anekkunt@redhat.com> | 2015-05-20 19:52:11 +0530 |
---|---|---|
committer | Atin Mukherjee <amukherj@redhat.com> | 2015-08-18 03:58:18 -0700 |
commit | c49b8064bd83a512dd962d4c4168728886ff0a5c (patch) | |
tree | 230c3963b7875040f7525284c8c6d7b34a430ba6 /xlators/mgmt/glusterd/src/glusterd-nfs-svc.c | |
parent | cc0ba2ad47aa9d023f823cced9047a2287a990b4 (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.
Back port of:
>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>
>(cherry picked from commit 7255febab2c38cc89b71f2519a20d10f53586000)
Change-Id: I42aa757ecc6b5b307b5927d11f12d08f57ac0ae2
BUG: 1253165
Reviewed-on: http://review.gluster.org/11905
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Tested-by: NetBSD Build System <jenkins@build.gluster.org>
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd-nfs-svc.c')
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-nfs-svc.c | 116 |
1 files changed, 10 insertions, 106 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-nfs-svc.c b/xlators/mgmt/glusterd/src/glusterd-nfs-svc.c index b1d98146877..ea24c1e1d25 100644 --- a/xlators/mgmt/glusterd/src/glusterd-nfs-svc.c +++ b/xlators/mgmt/glusterd/src/glusterd-nfs-svc.c @@ -15,6 +15,7 @@ #include "glusterd-volgen.h" #include "glusterd-nfs-svc.h" #include "glusterd-messages.h" +#include "glusterd-svc-helper.h" char *nfs_svc_name = "nfs"; @@ -66,107 +67,6 @@ glusterd_nfssvc_create_volfile () filepath, NULL); } -static int -glusterd_nfssvc_check_volfile_identical (gf_boolean_t *identical) -{ - char nfsvol[PATH_MAX] = {0,}; - char tmpnfsvol[PATH_MAX] = {0,}; - glusterd_conf_t *conf = NULL; - xlator_t *this = NULL; - int ret = -1; - int need_unlink = 0; - int tmp_fd = -1; - - this = THIS; - - GF_ASSERT (this); - GF_ASSERT (identical); - conf = this->private; - - glusterd_svc_build_volfile_path (nfs_svc_name, conf->workdir, - nfsvol, sizeof (nfsvol)); - - snprintf (tmpnfsvol, sizeof (tmpnfsvol), "/tmp/gnfs-XXXXXX"); - - tmp_fd = mkstemp (tmpnfsvol); - if (tmp_fd < 0) { - gf_msg (this->name, GF_LOG_WARNING, errno, - GD_MSG_FILE_OP_FAILED, "Unable to create temp file" - " %s:(%s)", tmpnfsvol, strerror (errno)); - goto out; - } - - need_unlink = 1; - - ret = glusterd_create_global_volfile (build_nfs_graph, - tmpnfsvol, NULL); - if (ret) - goto out; - - ret = glusterd_check_files_identical (nfsvol, tmpnfsvol, - identical); - if (ret) - goto out; - -out: - if (need_unlink) - unlink (tmpnfsvol); - - if (tmp_fd >= 0) - close (tmp_fd); - - return ret; -} - -static int -glusterd_nfssvc_check_topology_identical (gf_boolean_t *identical) -{ - char nfsvol[PATH_MAX] = {0,}; - char tmpnfsvol[PATH_MAX] = {0,}; - glusterd_conf_t *conf = NULL; - xlator_t *this = THIS; - int ret = -1; - int tmpclean = 0; - int tmpfd = -1; - - if ((!identical) || (!this) || (!this->private)) - goto out; - - conf = (glusterd_conf_t *) this->private; - GF_ASSERT (conf); - - /* Fetch the original NFS volfile */ - glusterd_svc_build_volfile_path (conf->nfs_svc.name, conf->workdir, - nfsvol, sizeof (nfsvol)); - - /* Create the temporary NFS volfile */ - snprintf (tmpnfsvol, sizeof (tmpnfsvol), "/tmp/gnfs-XXXXXX"); - tmpfd = mkstemp (tmpnfsvol); - if (tmpfd < 0) { - gf_msg (this->name, GF_LOG_WARNING, errno, - GD_MSG_FILE_OP_FAILED, "Unable to create temp file" - " %s: (%s)", tmpnfsvol, strerror (errno)); - goto out; - } - - tmpclean = 1; /* SET the flag to unlink() tmpfile */ - - ret = glusterd_create_global_volfile (build_nfs_graph, - tmpnfsvol, NULL); - if (ret) - goto out; - - /* Compare the topology of volfiles */ - ret = glusterd_check_topology_identical (nfsvol, tmpnfsvol, - identical); -out: - if (tmpfd >= 0) - close (tmpfd); - if (tmpclean) - unlink (tmpnfsvol); - return ret; -} - int glusterd_nfssvc_manager (glusterd_svc_t *svc, void *data, int flags) { @@ -246,17 +146,18 @@ glusterd_nfssvc_reconfigure () gf_boolean_t identical = _gf_false; this = THIS; - GF_ASSERT (this); + GF_VALIDATE_OR_GOTO (this->name, this, out); priv = this->private; - GF_ASSERT (priv); - + GF_VALIDATE_OR_GOTO (this->name, priv, out); /* * 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_nfssvc_check_volfile_identical (&identical); + ret = glusterd_svc_check_volfile_identical (priv->nfs_svc.name, + build_nfs_graph, + &identical); if (ret) goto out; @@ -271,7 +172,9 @@ glusterd_nfssvc_reconfigure () * changed, then inform the xlator to reconfigure the options. */ identical = _gf_false; /* RESET the FLAG */ - ret = glusterd_nfssvc_check_topology_identical (&identical); + ret = glusterd_svc_check_topology_identical (priv->nfs_svc.name, + build_nfs_graph, + &identical); if (ret) goto out; @@ -294,6 +197,7 @@ glusterd_nfssvc_reconfigure () PROC_START_NO_WAIT); out: + gf_msg_debug (this->name, 0, "Returning %d", ret); return ret; } |