summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--extras/ganesha/config/ganesha-ha.conf.sample3
-rw-r--r--extras/ganesha/scripts/ganesha-ha.sh34
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-ganesha.c62
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-op-sm.c2
-rw-r--r--xlators/mgmt/glusterd/src/glusterd.h2
5 files changed, 26 insertions, 77 deletions
diff --git a/extras/ganesha/config/ganesha-ha.conf.sample b/extras/ganesha/config/ganesha-ha.conf.sample
index 2077800d255..c22892bde56 100644
--- a/extras/ganesha/config/ganesha-ha.conf.sample
+++ b/extras/ganesha/config/ganesha-ha.conf.sample
@@ -2,9 +2,6 @@
# must be unique within the subnet
HA_NAME="ganesha-ha-360"
#
-# The gluster server from which to mount the shared data volume.
-HA_VOL_SERVER="server1"
-#
# N.B. you may use short names or long names; you may not use IP addrs.
# Once you select one, stay with it as it will be mildly unpleasant to
# clean up if you switch later on. Ensure that all names - short and/or
diff --git a/extras/ganesha/scripts/ganesha-ha.sh b/extras/ganesha/scripts/ganesha-ha.sh
index 28fc837550f..60861d4a687 100644
--- a/extras/ganesha/scripts/ganesha-ha.sh
+++ b/extras/ganesha/scripts/ganesha-ha.sh
@@ -341,35 +341,15 @@ string:"EXPORT(Path=/$VOL)" 2>&1)
copy_export_config ()
{
local new_node=${1}
- local tganesha_conf=$(mktemp)
- local tganesha_exports=$(mktemp -d)
- local short_host=$(hostname -s)
- # avoid prompting for password, even with password-less scp
- # scp $host1:$file $host2:$file prompts for the password
- # Ideally all the existing nodes in the cluster should have same
- # copy of the configuration files. Maybe for sanity check, copy
- # the state from HA_VOL_SERVER?
- if [ "${HA_VOL_SERVER}" == $(hostname) ]
- then
- cp ${GANESHA_CONF} ${tganesha_conf}
- else
- scp -oPasswordAuthentication=no -oStrictHostKeyChecking=no -i \
-${SECRET_PEM} ${HA_VOL_SERVER}:${GANESHA_CONF} $short_host:${tganesha_conf}
- fi
+
+ # The add node should be executed from one of the nodes in ganesha
+ # cluster. So all the configuration file will be available in that
+ # node itself. So just copy that to new node
scp -oPasswordAuthentication=no -oStrictHostKeyChecking=no -i \
-${SECRET_PEM} ${tganesha_conf} ${new_node}:${GANESHA_CONF}
- rm -f ${tganesha_conf}
+${SECRET_PEM} ${GANESHA_CONF} ${new_node}:${GANESHA_CONF}
- if [ "${HA_VOL_SERVER}" == $(hostname) ]
- then
- cp -r ${HA_CONFDIR}/exports ${tganesha_exports}
- else
- scp -r -oPasswordAuthentication=no -oStrictHostKeyChecking=no -i \
-${SECRET_PEM} ${HA_VOL_SERVER}:${HA_CONFDIR}/exports/ $short_host:${tganesha_exports}
- fi
scp -r -oPasswordAuthentication=no -oStrictHostKeyChecking=no -i \
-${SECRET_PEM} ${tganesha_exports}/exports ${new_node}:${HA_CONFDIR}/
- rm -rf ${tganesha_exports}
+${SECRET_PEM} ${HA_CONFDIR}/exports/ ${new_node}:${HA_CONFDIR}/
}
@@ -885,8 +865,6 @@ main()
# ignore any comment lines
cfgline=$(grep ^HA_NAME= ${ha_conf})
eval $(echo ${cfgline} | grep -F HA_NAME=)
- cfgline=$(grep ^HA_VOL_SERVER= ${ha_conf})
- eval $(echo ${cfgline} | grep -F HA_VOL_SERVER=)
cfgline=$(grep ^HA_CLUSTER_NODES= ${ha_conf})
eval $(echo ${cfgline} | grep -F HA_CLUSTER_NODES=)
fi
diff --git a/xlators/mgmt/glusterd/src/glusterd-ganesha.c b/xlators/mgmt/glusterd/src/glusterd-ganesha.c
index 1becbbc7e53..badb4c2f067 100644
--- a/xlators/mgmt/glusterd/src/glusterd-ganesha.c
+++ b/xlators/mgmt/glusterd/src/glusterd-ganesha.c
@@ -364,46 +364,14 @@ out:
return ret;
}
-/* Following 2 functions parse GANESHA_HA_CONF
+/* Following function parse GANESHA_HA_CONF
* The sample file looks like below,
* HA_NAME="ganesha-ha-360"
* HA_VOL_NAME="ha-state"
- * HA_VOL_MNT="/mount-point"
- * HA_VOL_SERVER="server1"
* HA_CLUSTER_NODES="server1,server2"
* VIP_rhs_1="10.x.x.x"
* VIP_rhs_2="10.x.x.x." */
-gf_boolean_t
-is_ganesha_host (void)
-{
- char *host_from_file = NULL;
- gf_boolean_t ret = _gf_false;
- xlator_t *this = NULL;
-
- this = THIS;
-
- host_from_file = parsing_ganesha_ha_conf ("HA_VOL_SERVER");
- if (host_from_file == NULL) {
- gf_msg (this->name, GF_LOG_INFO, errno,
- GD_MSG_GET_CONFIG_INFO_FAILED,
- "couldn't get HA_VOL_SERVER from file %s",
- GANESHA_HA_CONF);
- return _gf_false;
- }
-
- ret = gf_is_local_addr (host_from_file);
- if (ret) {
- gf_msg (this->name, GF_LOG_INFO, 0,
- GD_MSG_NFS_GNS_HOST_FOUND,
- "ganesha host found "
- "Hostname is %s", host_from_file);
- }
-
- GF_FREE (host_from_file);
- return ret;
-}
-
/* Check if the localhost is listed as one of nfs-ganesha nodes */
gf_boolean_t
check_host_list (void)
@@ -411,7 +379,7 @@ check_host_list (void)
glusterd_conf_t *priv = NULL;
char *hostname, *hostlist;
- int ret = _gf_false;
+ gf_boolean_t ret = _gf_false;
xlator_t *this = NULL;
this = THIS;
@@ -639,7 +607,7 @@ out:
}
int
-tear_down_cluster(void)
+tear_down_cluster(gf_boolean_t run_teardown)
{
int ret = 0;
runner_t runner = {0,};
@@ -649,7 +617,7 @@ tear_down_cluster(void)
struct dirent scratch[2] = {{0,},};
char path[PATH_MAX] = {0,};
- if (is_ganesha_host()) {
+ if (run_teardown) {
runinit (&runner);
runner_add_args (&runner, "sh",
GANESHA_PREFIX"/ganesha-ha.sh", "teardown",
@@ -709,12 +677,12 @@ out:
int
-setup_cluster(void)
+setup_cluster(gf_boolean_t run_setup)
{
int ret = 0;
runner_t runner = {0,};
- if (is_ganesha_host()) {
+ if (run_setup) {
runinit (&runner);
runner_add_args (&runner, "sh", GANESHA_PREFIX"/ganesha-ha.sh",
"setup", CONFDIR, NULL);
@@ -725,7 +693,7 @@ setup_cluster(void)
static int
-teardown (char **op_errstr)
+teardown (gf_boolean_t run_teardown, char **op_errstr)
{
runner_t runner = {0,};
int ret = 1;
@@ -735,7 +703,7 @@ teardown (char **op_errstr)
priv = THIS->private;
- ret = tear_down_cluster();
+ ret = tear_down_cluster (run_teardown);
if (ret == -1) {
gf_asprintf (op_errstr, "Cleanup of NFS-Ganesha"
" HA config failed.");
@@ -873,14 +841,14 @@ out:
}
static int
-pre_setup (char **op_errstr)
+pre_setup (gf_boolean_t run_setup, char **op_errstr)
{
int ret = 0;
ret = check_host_list();
if (ret) {
- ret = setup_cluster();
+ ret = setup_cluster(run_setup);
if (ret == -1)
gf_asprintf (op_errstr, "Failed to set up HA "
"config for NFS-Ganesha. "
@@ -927,12 +895,18 @@ glusterd_handle_ganesha_op (dict_t *dict, char **op_errstr,
}
if (strcmp (key, GLUSTERD_STORE_KEY_GANESHA_GLOBAL) == 0) {
+ /* *
+ * The set up/teardown of pcs cluster should be performed only
+ * once. This will done on the node in which the cli command
+ * 'gluster nfs-ganesha <enable/disable>' got executed. So that
+ * node should part of ganesha HA cluster
+ */
if (option) {
- ret = pre_setup (op_errstr);
+ ret = pre_setup (is_origin_glusterd (dict), op_errstr);
if (ret < 0)
goto out;
} else {
- ret = teardown (op_errstr);
+ ret = teardown (is_origin_glusterd (dict), 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 b4eb8b13c66..5519d2f734c 100644
--- a/xlators/mgmt/glusterd/src/glusterd-op-sm.c
+++ b/xlators/mgmt/glusterd/src/glusterd-op-sm.c
@@ -2047,7 +2047,7 @@ glusterd_op_reset_all_volume_options (xlator_t *this, dict_t *dict)
option = dict_get_str_boolean (conf->opts, GLUSTERD_STORE_KEY_GANESHA_GLOBAL,
_gf_false);
if (option) {
- ret = tear_down_cluster();
+ ret = tear_down_cluster (is_origin_glusterd (dict));
if (ret == -1)
gf_msg (THIS->name, GF_LOG_WARNING, errno,
GD_MSG_DICT_GET_FAILED,
diff --git a/xlators/mgmt/glusterd/src/glusterd.h b/xlators/mgmt/glusterd/src/glusterd.h
index c07fe42fe61..11b55cbb79d 100644
--- a/xlators/mgmt/glusterd/src/glusterd.h
+++ b/xlators/mgmt/glusterd/src/glusterd.h
@@ -1072,7 +1072,7 @@ int ganesha_manage_export (char *volname, char *value, char **op_errstr,
gf_boolean_t reboot);
gf_boolean_t glusterd_check_ganesha_export (glusterd_volinfo_t *volinfo);
int stop_ganesha (char **op_errstr);
-int tear_down_cluster (void);
+int tear_down_cluster (gf_boolean_t run_teardown);
int glusterd_op_add_brick (dict_t *dict, char **op_errstr);
int glusterd_op_remove_brick (dict_t *dict, char **op_errstr);
int glusterd_op_stage_add_brick (dict_t *dict, char **op_errstr,