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 <jthottan@redhat.com>
Reviewed-on: http://review.gluster.org/15914
Smoke: Gluster Build System <jenkins@build.gluster.org>
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
Reviewed-by: soumya k <skoduri@redhat.com>
Reviewed-by: Kaleb KEITHLEY <kkeithle@redhat.com>
This commit is contained in:
Jiffin Tony Thottan 2016-11-23 16:04:26 +05:30 committed by Kaleb KEITHLEY
parent b214b643d6
commit 4a9a5362f0
6 changed files with 35 additions and 87 deletions

View File

@ -1,4 +1 @@
EXTRA_DIST = S31ganesha-reset.sh
hookdir = $(GLUSTERD_WORKDIR)/hooks/1/reset/post/
hook_SCRIPTS = S31ganesha-reset.sh
EXTRA_DIST =

View File

@ -1,48 +0,0 @@
#!/bin/bash
PROGNAME="Sganesha-reset"
OPTSPEC="volname:,gd-workdir:"
VOL=
GLUSTERD_WORKDIR=
function parse_args () {
ARGS=$(getopt -l $OPTSPEC -o "o" -name $PROGNAME $@)
eval set -- "$ARGS"
while true; do
case $1 in
--volname)
shift
VOL=$1
;;
--gd-workdir)
shift
GLUSTERD_WORKDIR=$1
;;
*)
shift
break
;;
esac
shift
done
}
function is_volume_started () {
volname=$1
echo "$(grep status $GLUSTERD_WORKDIR/vols/"$volname"/info |\
cut -d"=" -f2)"
}
parse_args $@
if ps aux | grep -q "[g]anesha.nfsd"
then
kill -s TERM `cat /var/run/ganesha.pid`
sleep 10
rm -rf /var/lib/glusterfs-ganesha/exports
rm -rf /var/lib/glusterfs-ganesha/.export_added
sed -i /conf/d /var/lib/ganesha/nfs-ganesha.conf
if [ "1" = $(is_volume_started "$VOL") ];
then
gluster volume start $VOL force
fi
fi

View File

@ -1058,7 +1058,6 @@ exit 0
%{_libexecdir}/ganesha/*
%{_prefix}/lib/ocf/resource.d/heartbeat/*
%{_sharedstatedir}/glusterd/hooks/1/start/post/S31ganesha-start.sh
%{_sharedstatedir}/glusterd/hooks/1/reset/post/S31ganesha-reset.sh
%if ( 0%{!?_without_georeplication:1} )
%files geo-replication
@ -1272,6 +1271,9 @@ exit 0
%endif
%changelog
* Thu Nov 24 2016 Jiffin Tony Thottan <jhottan@redhat.com>
- remove S31ganesha-reset.sh from hooks (#1397795)
* Thu Sep 22 2016 Kaleb S. KEITHLEY <kkeithle@redhat.com>
- python-ctypes no long exists, now in python stdlib (#1378436)

View File

@ -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,

View File

@ -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)

View File

@ -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);