From e5450c639915f4c29ae2ad480e4128b5845254cc Mon Sep 17 00:00:00 2001 From: Jiffin Tony Thottan Date: Tue, 25 Apr 2017 16:36:40 +0530 Subject: [PATCH 063/124] glusterd/ganesha : update cache invalidation properly during volume stop As per current code, during volume stop for ganesha enabled volume the feature.cache-invalidation was turned "off" in ganesha_manage_export(). And it never turn back to "on" when volume is started. It is not desire to modify the volume options during stop, this patch fixes above mentioned issue. Label: DOWNSTREAM ONLY Change-Id: Iea9c62e5cda4f54805b41ea6055cf0c3652a634c Signed-off-by: Jiffin Tony Thottan Reviewed-on: https://review.gluster.org/17111 Smoke: Gluster Build System NetBSD-regression: NetBSD Build System CentOS-regression: Gluster Build System Reviewed-by: Kaleb KEITHLEY Reviewed-by: Raghavendra Talur Signed-off-by: Jiffin Tony Thottan Reviewed-on: https://code.engineering.redhat.com/gerrit/167148 Reviewed-by: Soumya Koduri Tested-by: RHGS Build Bot Reviewed-by: Sunil Kumar Heggodu Gopala Acharya --- xlators/mgmt/glusterd/src/glusterd-ganesha.c | 33 ++++++++++++++----------- xlators/mgmt/glusterd/src/glusterd-op-sm.c | 4 +-- xlators/mgmt/glusterd/src/glusterd-volume-ops.c | 2 +- xlators/mgmt/glusterd/src/glusterd.h | 3 ++- 4 files changed, 23 insertions(+), 19 deletions(-) diff --git a/xlators/mgmt/glusterd/src/glusterd-ganesha.c b/xlators/mgmt/glusterd/src/glusterd-ganesha.c index b743216..1c2ba7a 100644 --- a/xlators/mgmt/glusterd/src/glusterd-ganesha.c +++ b/xlators/mgmt/glusterd/src/glusterd-ganesha.c @@ -445,7 +445,8 @@ manage_export_config(char *volname, char *value, char **op_errstr) /* Exports and unexports a particular volume via NFS-Ganesha */ int -ganesha_manage_export(dict_t *dict, char *value, char **op_errstr) +ganesha_manage_export(dict_t *dict, char *value, + gf_boolean_t update_cache_invalidation, char **op_errstr) { runner_t runner = { 0, @@ -558,19 +559,21 @@ ganesha_manage_export(dict_t *dict, char *value, char **op_errstr) } } - vol_opts = volinfo->dict; - ret = dict_set_dynstr_with_alloc(vol_opts, "features.cache-invalidation", - value); - if (ret) - gf_asprintf(op_errstr, - "Cache-invalidation could not" - " be set to %s.", - value); - ret = glusterd_store_volinfo(volinfo, GLUSTERD_VOLINFO_VER_AC_INCREMENT); - if (ret) - gf_asprintf(op_errstr, "failed to store volinfo for %s", - volinfo->volname); - + if (update_cache_invalidation) { + vol_opts = volinfo->dict; + ret = dict_set_dynstr_with_alloc(vol_opts, + "features.cache-invalidation", value); + if (ret) + gf_asprintf(op_errstr, + "Cache-invalidation could not" + " be set to %s.", + value); + ret = glusterd_store_volinfo(volinfo, + GLUSTERD_VOLINFO_VER_AC_INCREMENT); + if (ret) + gf_asprintf(op_errstr, "failed to store volinfo for %s", + volinfo->volname); + } out: return ret; } @@ -867,7 +870,7 @@ glusterd_handle_ganesha_op(dict_t *dict, char **op_errstr, char *key, GF_ASSERT(value); if (strcmp(key, "ganesha.enable") == 0) { - ret = ganesha_manage_export(dict, value, op_errstr); + ret = ganesha_manage_export(dict, value, _gf_true, op_errstr); if (ret < 0) goto out; } diff --git a/xlators/mgmt/glusterd/src/glusterd-op-sm.c b/xlators/mgmt/glusterd/src/glusterd-op-sm.c index a630c48..52809a8 100644 --- a/xlators/mgmt/glusterd/src/glusterd-op-sm.c +++ b/xlators/mgmt/glusterd/src/glusterd-op-sm.c @@ -1178,7 +1178,7 @@ glusterd_op_stage_set_volume(dict_t *dict, char **op_errstr) if ((strcmp(key, "ganesha.enable") == 0) && (strcmp(value, "off") == 0)) { - ret = ganesha_manage_export(dict, "off", op_errstr); + ret = ganesha_manage_export(dict, "off", _gf_true, op_errstr); if (ret) goto out; } @@ -1691,7 +1691,7 @@ glusterd_op_stage_reset_volume(dict_t *dict, char **op_errstr) */ if (volinfo && (!strcmp(key, "all") || !strcmp(key, "ganesha.enable"))) { if (glusterd_check_ganesha_export(volinfo)) { - ret = ganesha_manage_export(dict, "off", op_errstr); + ret = ganesha_manage_export(dict, "off", _gf_true, op_errstr); if (ret) gf_msg(this->name, GF_LOG_WARNING, 0, GD_MSG_NFS_GNS_RESET_FAIL, "Could not reset ganesha.enable key"); diff --git a/xlators/mgmt/glusterd/src/glusterd-volume-ops.c b/xlators/mgmt/glusterd/src/glusterd-volume-ops.c index 81c668c..de4eccb 100644 --- a/xlators/mgmt/glusterd/src/glusterd-volume-ops.c +++ b/xlators/mgmt/glusterd/src/glusterd-volume-ops.c @@ -1825,7 +1825,7 @@ glusterd_op_stage_stop_volume(dict_t *dict, char **op_errstr) ret = glusterd_check_ganesha_export(volinfo); if (ret) { - ret = ganesha_manage_export(dict, "off", op_errstr); + ret = ganesha_manage_export(dict, "off", _gf_false, op_errstr); if (ret) { gf_msg(THIS->name, GF_LOG_WARNING, 0, GD_MSG_NFS_GNS_UNEXPRT_VOL_FAIL, diff --git a/xlators/mgmt/glusterd/src/glusterd.h b/xlators/mgmt/glusterd/src/glusterd.h index 5135181..e858ce4 100644 --- a/xlators/mgmt/glusterd/src/glusterd.h +++ b/xlators/mgmt/glusterd/src/glusterd.h @@ -1368,7 +1368,8 @@ glusterd_op_stage_set_ganesha(dict_t *dict, char **op_errstr); int glusterd_op_set_ganesha(dict_t *dict, char **errstr); int -ganesha_manage_export(dict_t *dict, char *value, char **op_errstr); +ganesha_manage_export(dict_t *dict, char *value, + gf_boolean_t update_cache_invalidation, char **op_errstr); gf_boolean_t glusterd_is_ganesha_cluster(); gf_boolean_t -- 1.8.3.1