From 4a9a5362f0b74046b7f161d485b2ffb44c027ead Mon Sep 17 00:00:00 2001 From: Jiffin Tony Thottan Date: Wed, 23 Nov 2016 16:04:26 +0530 Subject: glusterd/ganesha : handle volume reset properly for ganesha options The "gluster volume reset" should first unexport the volume and then delete export configuration file. Also reset option is not applicable for ganesha.enable if volume value is "all". This patch also changes the name of create_export_config into manange_export_config Change-Id: Ie81a49e7d3e39a88bca9fbae5002bfda5cab34af BUG: 1397795 Signed-off-by: Jiffin Tony Thottan Reviewed-on: http://review.gluster.org/15914 Smoke: Gluster Build System NetBSD-regression: NetBSD Build System CentOS-regression: Gluster Build System Reviewed-by: soumya k Reviewed-by: Kaleb KEITHLEY --- xlators/mgmt/glusterd/src/glusterd-ganesha.c | 6 +-- xlators/mgmt/glusterd/src/glusterd-op-sm.c | 57 +++++++++++++--------------- xlators/mgmt/glusterd/src/glusterd.h | 2 +- 3 files changed, 31 insertions(+), 34 deletions(-) (limited to 'xlators/mgmt/glusterd') diff --git a/xlators/mgmt/glusterd/src/glusterd-ganesha.c b/xlators/mgmt/glusterd/src/glusterd-ganesha.c index 6c34de0dda4..746a3d1e364 100644 --- a/xlators/mgmt/glusterd/src/glusterd-ganesha.c +++ b/xlators/mgmt/glusterd/src/glusterd-ganesha.c @@ -215,7 +215,7 @@ glusterd_check_ganesha_cmd (char *key, char *value, char **errstr, dict_t *dict) "Unable to get volume name"); goto out; } - ret = create_export_config (volname, "off", errstr); + ret = manage_export_config (volname, "off", errstr); } } out: @@ -426,7 +426,7 @@ check_host_list (void) } int -create_export_config (char *volname, char *value, char **op_errstr) +manage_export_config (char *volname, char *value, char **op_errstr) { runner_t runner = {0,}; int ret = -1; @@ -527,7 +527,7 @@ ganesha_manage_export (dict_t *dict, char *value, char **op_errstr) * is executed * */ if (option) { - ret = create_export_config (volname, "on", op_errstr); + ret = manage_export_config (volname, "on", op_errstr); if (ret) { gf_msg (this->name, GF_LOG_ERROR, 0, GD_MSG_EXPORT_FILE_CREATE_FAIL, diff --git a/xlators/mgmt/glusterd/src/glusterd-op-sm.c b/xlators/mgmt/glusterd/src/glusterd-op-sm.c index b2dfcb27f5b..3d9372a5357 100644 --- a/xlators/mgmt/glusterd/src/glusterd-op-sm.c +++ b/xlators/mgmt/glusterd/src/glusterd-op-sm.c @@ -1499,15 +1499,6 @@ glusterd_op_stage_reset_volume (dict_t *dict, char **op_errstr) ret = glusterd_validate_volume_id (dict, volinfo); if (ret) goto out; - ret = dict_get_str_boolean (priv->opts, - GLUSTERD_STORE_KEY_GANESHA_GLOBAL, _gf_false); - if (ret) { - ret = stop_ganesha (op_errstr); - if (ret) - gf_msg (THIS->name, GF_LOG_WARNING, 0, - GD_MSG_NFS_GNS_STOP_FAIL, - "Could not stop NFS-Ganesha service"); - } } @@ -1517,7 +1508,23 @@ glusterd_op_stage_reset_volume (dict_t *dict, char **op_errstr) GD_MSG_DICT_GET_FAILED, "Unable to get option key"); goto out; } - if (strcmp(key, "all")) { + + /* * + * If key ganesha.enable is set, then volume should be unexported from + * ganesha server. Also it is a volume-level option, perform only when + * volume name not equal to "all"(in other words if volinfo != NULL) + */ + if (volinfo && (!strcmp (key, "all") || !strcmp(key, "ganesha.enable"))) { + if (glusterd_check_ganesha_export (volinfo)) { + ret = ganesha_manage_export (dict, "off", op_errstr); + if (ret) + gf_msg (this->name, GF_LOG_WARNING, 0, + GD_MSG_NFS_GNS_RESET_FAIL, + "Could not reset ganesha.enable key"); + } + } + + if (strcmp(key, "all")) { exists = glusterd_check_option_exists (key, &key_fixed); if (exists == -1) { ret = -1; @@ -2054,7 +2061,6 @@ glusterd_op_reset_all_volume_options (xlator_t *this, dict_t *dict) gf_boolean_t all = _gf_false; char *next_version = NULL; gf_boolean_t quorum_action = _gf_false; - gf_boolean_t option = _gf_false; conf = this->private; ret = dict_get_str (dict, "key", &key); @@ -2083,15 +2089,6 @@ glusterd_op_reset_all_volume_options (xlator_t *this, dict_t *dict) if (key_fixed) key = key_fixed; - option = dict_get_str_boolean (conf->opts, GLUSTERD_STORE_KEY_GANESHA_GLOBAL, - _gf_false); - if (option) { - ret = tear_down_cluster (is_origin_glusterd (dict)); - if (ret == -1) - gf_msg (THIS->name, GF_LOG_WARNING, errno, - GD_MSG_DICT_GET_FAILED, - "Could not tear down NFS-Ganesha cluster"); - } ret = -1; dup_opt = dict_new (); @@ -2200,16 +2197,6 @@ glusterd_op_reset_volume (dict_t *dict, char **op_rspstr) if (glusterd_is_quorum_changed (volinfo->dict, key, NULL)) quorum_action = _gf_true; - ret = glusterd_check_ganesha_export (volinfo); - if (ret) { - ret = ganesha_manage_export (dict, "off", op_rspstr); - if (ret) { - gf_msg (THIS->name, GF_LOG_WARNING, 0, - GD_MSG_NFS_GNS_RESET_FAIL, - "Could not reset ganesha.enable key"); - ret = 0; - } - } ret = glusterd_options_reset (volinfo, key, &is_force); if (ret == -1) { @@ -2226,6 +2213,16 @@ glusterd_op_reset_volume (dict_t *dict, char **op_rspstr) } } + if (!strcmp(key, "ganesha.enable") || !strcmp (key, "all")) { + if (glusterd_check_ganesha_export (volinfo)) { + ret = manage_export_config (volname, "off", op_rspstr); + if (ret) + gf_msg (this->name, GF_LOG_WARNING, 0, + GD_MSG_NFS_GNS_RESET_FAIL, + "Could not reset ganesha.enable key"); + } + } + out: GF_FREE (key_fixed); if (quorum_action) diff --git a/xlators/mgmt/glusterd/src/glusterd.h b/xlators/mgmt/glusterd/src/glusterd.h index 919eed02ec6..a5d964a29d6 100644 --- a/xlators/mgmt/glusterd/src/glusterd.h +++ b/xlators/mgmt/glusterd/src/glusterd.h @@ -1077,7 +1077,7 @@ int glusterd_check_ganesha_cmd (char *key, char *value, int 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); -int create_export_config (char *volname, char *value, char **op_errstr); +int manage_export_config (char *volname, char *value, char **op_errstr); gf_boolean_t glusterd_check_ganesha_export (glusterd_volinfo_t *volinfo); int stop_ganesha (char **op_errstr); int tear_down_cluster (gf_boolean_t run_teardown); -- cgit