diff options
author | Jiffin Tony Thottan <jthottan@redhat.com> | 2016-04-18 21:34:32 +0530 |
---|---|---|
committer | Atin Mukherjee <amukherj@redhat.com> | 2016-05-05 23:12:40 -0700 |
commit | f71e2fa49af185779b9f43e146effd122d4e9da0 (patch) | |
tree | aa1f650dc0d84ec77587833b6222c3979a9aae44 /extras | |
parent | e66add8a304ca610b74ecbbe48cec72dba582340 (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.
Change-Id: I5b2312c2f3cef962b1f795b9f16c8f0a27f08ee5
BUG: 1330097
Signed-off-by: Jiffin Tony Thottan <jthottan@redhat.com>
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>
Diffstat (limited to 'extras')
-rw-r--r-- | extras/ganesha/scripts/Makefile.am | 4 | ||||
-rwxr-xr-x | extras/ganesha/scripts/copy-export-ganesha.sh | 97 |
2 files changed, 99 insertions, 2 deletions
diff --git a/extras/ganesha/scripts/Makefile.am b/extras/ganesha/scripts/Makefile.am index 224ed26e75b..c326fc2f136 100644 --- a/extras/ganesha/scripts/Makefile.am +++ b/extras/ganesha/scripts/Makefile.am @@ -1,6 +1,6 @@ EXTRA_DIST= ganesha-ha.sh dbus-send.sh create-export-ganesha.sh \ - generate-epoch.py + generate-epoch.py copy-export-ganesha.sh scriptsdir = $(libexecdir)/ganesha scripts_SCRIPTS = create-export-ganesha.sh dbus-send.sh ganesha-ha.sh \ - generate-epoch.py + generate-epoch.py copy-export-ganesha.sh diff --git a/extras/ganesha/scripts/copy-export-ganesha.sh b/extras/ganesha/scripts/copy-export-ganesha.sh new file mode 100755 index 00000000000..e8cdc98056c --- /dev/null +++ b/extras/ganesha/scripts/copy-export-ganesha.sh @@ -0,0 +1,97 @@ +#/bin/bash + +#This script is called by glusterd when in case of +#reboot.An export file specific to a volume +#is copied in GANESHA_DIR/exports from online node. + +# Try loading the config from any of the distro +# specific configuration locations +if [ -f /etc/sysconfig/ganesha ] + then + . /etc/sysconfig/ganesha +fi +if [ -f /etc/conf.d/ganesha ] + then + . /etc/conf.d/ganesha +fi +if [ -f /etc/default/ganesha ] + then + . /etc/default/ganesha +fi + +GANESHA_DIR=${1%/} +VOL=$2 +CONF= +host=$(hostname -s) +SECRET_PEM="/var/lib/glusterd/nfs/secret.pem" + +function check_cmd_status() +{ + if [ "$1" != "0" ] + then + rm -rf $GANESHA_DIR/exports/export.$VOL.conf + exit 1 + fi +} + + +if [ ! -d "$GANESHA_DIR/exports" ]; + then + mkdir $GANESHA_DIR/exports + check_cmd_status `echo $?` +fi + +function find_rhel7_conf +{ + while [[ $# > 0 ]] + do + key="$1" + case $key in + -f) + CONFFILE="$2" + ;; + *) + ;; + esac + shift + done +} + +if [ -z $CONFFILE ]; then + find_rhel7_conf $OPTIONS + +fi +CONF=${CONFFILE:-/etc/ganesha/ganesha.conf} + +#remove the old export entry from NFS-Ganesha +#if already exported +dbus-send --type=method_call --print-reply --system \ + --dest=org.ganesha.nfsd /org/ganesha/nfsd/ExportMgr \ + org.ganesha.nfsd.exportmgr.ShowExports \ + | grep -w -q "/$VOL" +if [ $? -eq 0 ]; then + removed_id=`cat $GANESHA_DIR/exports/export.$VOL.conf |\ + grep Export_Id | awk -F"[=,;]" '{print$2}' | tr -d '[[:space:]]'` + + dbus-send --print-reply --system --dest=org.ganesha.nfsd \ + /org/ganesha/nfsd/ExportMgr org.ganesha.nfsd.exportmgr.RemoveExport \ + uint16:$removed_id 2>&1 +fi + +ha_servers=$(pcs status | grep "Online:" | grep -o '\[.*\]' | sed -e 's/\[//' | sed -e 's/\]//') +IFS=$' ' +for server in ${ha_servers} ; do + current_host=`echo $server | cut -d "." -f 1` + if [ $host != $current_host ] + then + scp -oPasswordAuthentication=no -oStrictHostKeyChecking=no -i \ + ${SECRET_PEM} $server:$GANESHA_DIR/exports/export.$VOL.conf \ + $GANESHA_DIR/exports/export.$VOL.conf + break + fi +done + +if ! (cat $CONF | grep $VOL.conf\"$ ) +then +echo "%include \"$GANESHA_DIR/exports/export.$VOL.conf\"" >> $CONF +fi |