summaryrefslogtreecommitdiffstats
path: root/xlators/mgmt/glusterd/src/glusterd-utils.c
diff options
context:
space:
mode:
authorJiffin Tony Thottan <jthottan@redhat.com>2016-04-18 21:34:32 +0530
committerAtin Mukherjee <amukherj@redhat.com>2016-05-06 05:59:44 -0700
commit058a5a7bf5fa099fe2d6de86ac35fa5594b1ebd8 (patch)
treeef846c8eb6a52de0c5c8542f374d6c6b182c6d20 /xlators/mgmt/glusterd/src/glusterd-utils.c
parentfd8921b9eb03af69815bb2d7cff07b63048c2d5a (diff)
glusterd-ganesha : copy ganesha export configuration files during reboot
glusterd creates export conf file for ganesha using hook script during volume start and ganesha_manage_export() for volume set command. But this routine is not added in glusterd restart scenario. Consider the following case, in a three node cluster a volume got exported via ganesha while one of the node is offline(glusterd is not running). When the node comes back online, that volume is not exported on that node due to the above mentioned issue. Also I have removed unused variables from glusterd_handle_ganesha_op() For this patch to work pcs cluster should running on that be node. Upstream reference >Change-Id: I5b2312c2f3cef962b1f795b9f16c8f0a27f08ee5 >BUG: 1330097 >Signed-off-by: Jiffin Tony Thottan <jthottan@redhat.com>i >Reviewed-on: http://review.gluster.org/14063 >Smoke: Gluster Build System <jenkins@build.gluster.com> >NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org> >CentOS-regression: Gluster Build System <jenkins@build.gluster.com> >Reviewed-by: soumya k <skoduri@redhat.com> >Reviewed-by: Atin Mukherjee <amukherj@redhat.com> Change-Id: I5b2312c2f3cef962b1f795b9f16c8f0a27f08ee5 BUG: 1333661 Signed-off-by: Jiffin Tony Thottan <jthottan@redhat.com> Reviewed-on: http://review.gluster.org/14233 Smoke: Gluster Build System <jenkins@build.gluster.com> NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org> Reviewed-by: Atin Mukherjee <amukherj@redhat.com> CentOS-regression: 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.c32
1 files changed, 31 insertions, 1 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c
index 99b01e32915..a55265f763f 100644
--- a/xlators/mgmt/glusterd/src/glusterd-utils.c
+++ b/xlators/mgmt/glusterd/src/glusterd-utils.c
@@ -3997,6 +3997,9 @@ glusterd_import_friend_volume (dict_t *peer_data, size_t count)
glusterd_volinfo_t *old_volinfo = NULL;
glusterd_volinfo_t *new_volinfo = NULL;
glusterd_svc_t *svc = NULL;
+ gf_boolean_t newexportvalue;
+ gf_boolean_t oldexportvalue;
+ char *value = NULL;
GF_ASSERT (peer_data);
@@ -4017,7 +4020,9 @@ glusterd_import_friend_volume (dict_t *peer_data, size_t count)
ret = glusterd_volinfo_find (new_volinfo->volname, &old_volinfo);
if (0 == ret) {
- (void) gd_check_and_update_rebalance_info (old_volinfo,
+ oldexportvalue = glusterd_check_ganesha_export (old_volinfo);
+
+ (void) gd_check_and_update_rebalance_info (old_volinfo,
new_volinfo);
/* Copy brick ports from the old volinfo always. The old_volinfo
@@ -4038,6 +4043,31 @@ glusterd_import_friend_volume (dict_t *peer_data, size_t count)
}
}
+ ret = glusterd_volinfo_get (new_volinfo, "ganesha.enable", &value);
+ if (ret)
+ goto out;
+ ret = gf_string2boolean (value, &newexportvalue);
+ if (ret)
+ goto out;
+
+ /* *
+ * if new and old export value is off, then there is no point in calling
+ * ganesha_manage_export
+ */
+ if (!((newexportvalue == oldexportvalue) &&
+ newexportvalue == _gf_false)) {
+ ret = ganesha_manage_export (new_volinfo->volname, value,
+ NULL, _gf_true);
+ if (ret) {
+ gf_msg (this->name, GF_LOG_ERROR, 0,
+ GD_MSG_NFS_GNS_OP_HANDLE_FAIL,
+ "Returning from ganesha_manage_export with"
+ " ret: %d for volume %s ganesha.enable %s",
+ ret, new_volinfo->volname,
+ value);
+ goto out;
+ }
+ }
ret = glusterd_store_volinfo (new_volinfo, GLUSTERD_VOLINFO_VER_AC_NONE);
if (ret) {
gf_msg (this->name, GF_LOG_ERROR, 0,