diff options
| author | Jiffin Tony Thottan <jthottan@redhat.com> | 2016-07-13 11:38:10 +0530 | 
|---|---|---|
| committer | Kaleb KEITHLEY <kkeithle@redhat.com> | 2016-08-26 04:47:51 -0700 | 
| commit | 4786150ebe36154ec0762a951612f66f68a7e95c (patch) | |
| tree | 5c9811ef5ad2cf762b433aac87229672c6fc2a0b | |
| parent | 2f44a979132a43c1cf12ed2b9e9e94dbe1311c9e (diff) | |
glusterd/ganesha : create export configuration file in shared storage
This is the second patch which moves export related configuration for
a volume into shared storage. The main change includes in scripts
create-export-ganesha.sh, dbus-send.sh and the handling of volume set
command "ganesha.enable". The manipulation of EXPORT_ID move from
dbus-send.sh to create-export-ganesha.sh.
In volume set handling following has performed
    stage                  |    commit
----------------------------------------------------------
1.) gluster v set <volname> ganesha.enable on
 None			   |	create export file
			   |    in node where cli executed,
			   |	thne export volume via dbus
2.) gluster v set <volname> ganesha.enable off
unexport volume via dbus   |	remove export file from the
			   |    shared storage
-----------------------------------------------------------
More details can be found at http://review.gluster.org/#/c/15105/
Change-Id: Ia8b0e89bc8fff24b0bc5d20a538a89212894a8e4
BUG: 1355956
Signed-off-by: Jiffin Tony Thottan <jthottan@redhat.com>
Reviewed-on: http://review.gluster.org/14908
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>
Smoke: Gluster Build System <jenkins@build.gluster.org>
Reviewed-by: Kaleb KEITHLEY <kkeithle@redhat.com>
| -rwxr-xr-x | extras/ganesha/scripts/create-export-ganesha.sh | 54 | ||||
| -rwxr-xr-x | extras/ganesha/scripts/dbus-send.sh | 59 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-ganesha.c | 55 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-op-sm.c | 6 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd.h | 1 | 
5 files changed, 72 insertions, 103 deletions
diff --git a/extras/ganesha/scripts/create-export-ganesha.sh b/extras/ganesha/scripts/create-export-ganesha.sh index a1a35dba58a..1ffba427457 100755 --- a/extras/ganesha/scripts/create-export-ganesha.sh +++ b/extras/ganesha/scripts/create-export-ganesha.sh @@ -21,14 +21,17 @@ if [ -f /etc/default/ganesha ]  fi  GANESHA_DIR=${1%/} -VOL=$2 -CONF= +OPTION=$2 +VOL=$3 +CONF=$GANESHA_DIR"/ganesha.conf" +declare -i EXPORT_ID  function check_cmd_status()  {          if [ "$1" != "0" ]                   then                   rm -rf $GANESHA_DIR/exports/export.$VOL.conf +                 sed -i /$VOL.conf/d $CONF                   exit 1          fi  } @@ -40,28 +43,6 @@ if [ ! -d "$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} -  function write_conf()  {  echo -e "# WARNING : Using Gluster CLI will overwrite manual @@ -85,9 +66,26 @@ echo '      Transports = "UDP","TCP";'  echo '      SecType = "sys";'  echo "     }"  } - -write_conf $@ > $GANESHA_DIR/exports/export.$VOL.conf -if ! (cat $CONF | grep  $VOL.conf\"$ ) +if [ "$OPTION" = "on" ];  then -echo "%include \"$GANESHA_DIR/exports/export.$VOL.conf\"" >> $CONF +        if ! (cat $CONF | grep  $VOL.conf\"$ ) +        then +                write_conf $@ > $GANESHA_DIR/exports/export.$VOL.conf +                echo "%include \"$GANESHA_DIR/exports/export.$VOL.conf\"" >> $CONF +                count=`ls -l $GANESHA_DIR/exports/*.conf | wc -l` +                if [ "$count" = "1" ] ; then +                        EXPORT_ID=2 +                else +                        EXPORT_ID=`cat $GANESHA_DIR/.export_added` +                        check_cmd_status `echo $?` +                        EXPORT_ID=EXPORT_ID+1 +                        sed -i s/Export_Id.*/"Export_Id= $EXPORT_ID ;"/ \ +                        $GANESHA_DIR/exports/export.$VOL.conf +                        check_cmd_status `echo $?` +                fi +                echo $EXPORT_ID > $GANESHA_DIR/.export_added +        fi +else +        rm -rf $GANESHA_DIR/exports/export.$VOL.conf +        sed -i /$VOL.conf/d $CONF  fi diff --git a/extras/ganesha/scripts/dbus-send.sh b/extras/ganesha/scripts/dbus-send.sh index 14af095464d..c071d03480c 100755 --- a/extras/ganesha/scripts/dbus-send.sh +++ b/extras/ganesha/scripts/dbus-send.sh @@ -15,71 +15,22 @@ if [ -f /etc/default/ganesha ]          . /etc/default/ganesha  fi -declare -i EXPORT_ID  GANESHA_DIR=${1%/}  OPTION=$2  VOL=$3 -CONF= - -function find_rhel7_conf -{ - while [[ $# > 0 ]] -        do -                key="$1" -                case $key in -                        -f) -                         CONFFILE="$2" -                         break; -                         ;; -                         *) -                         ;; -                 esac -                 shift -         done -} - -if [ -z $CONFFILE ] -        then -        find_rhel7_conf $OPTIONS - -fi - -CONF=${CONFFILE:-/etc/ganesha/ganesha.conf} +CONF=$GANESHA_DIR"/ganesha.conf"  function check_cmd_status()  {          if [ "$1" != "0" ] -                 then -                 rm -rf $GANESHA_DIR/exports/export.$VOL.conf -                 sed -i /$VOL.conf/d $CONF -                 exit 1 +        then +                logger "dynamic export failed on node :${hostname -s}"          fi  }  #This function keeps track of export IDs and increments it with every new entry  function dynamic_export_add()  { -        count=`ls -l $GANESHA_DIR/exports/*.conf | wc -l` -        if [ "$count" = "1" ] ; -                then -                EXPORT_ID=2 -        else -        #if [ -s /var/lib/ganesha/export_removed ]; -        #               then -        #               EXPORT_ID=`head -1 /var/lib/ganesha/export_removed` -        #               sed -i -e "1d" /var/lib/ganesha/export_removed -        #               else - -                 EXPORT_ID=`cat $GANESHA_DIR/.export_added` -                 check_cmd_status `echo $?` -                 EXPORT_ID=EXPORT_ID+1 -        #fi -        fi -        echo $EXPORT_ID > $GANESHA_DIR/.export_added -        check_cmd_status `echo $?` -        sed -i s/Export_Id.*/"Export_Id= $EXPORT_ID ;"/ \ -$GANESHA_DIR/exports/export.$VOL.conf -        check_cmd_status `echo $?`          dbus-send  --system \  --dest=org.ganesha.nfsd  /org/ganesha/nfsd/ExportMgr \  org.ganesha.nfsd.exportmgr.AddExport  string:$GANESHA_DIR/exports/export.$VOL.conf \ @@ -92,14 +43,10 @@ function dynamic_export_remove()  {          removed_id=`cat $GANESHA_DIR/exports/export.$VOL.conf |\  grep Export_Id | awk -F"[=,;]" '{print$2}'| tr -d '[[:space:]]'` -        check_cmd_status `echo $?`          dbus-send --print-reply --system \  --dest=org.ganesha.nfsd /org/ganesha/nfsd/ExportMgr \  org.ganesha.nfsd.exportmgr.RemoveExport uint16:$removed_id          check_cmd_status `echo $?` -        sed -i /$VOL.conf/d $CONF -        rm -rf $GANESHA_DIR/exports/export.$VOL.conf -  }  if [ "$OPTION" = "on" ]; diff --git a/xlators/mgmt/glusterd/src/glusterd-ganesha.c b/xlators/mgmt/glusterd/src/glusterd-ganesha.c index 728bfc627b0..3af2c79cafc 100644 --- a/xlators/mgmt/glusterd/src/glusterd-ganesha.c +++ b/xlators/mgmt/glusterd/src/glusterd-ganesha.c @@ -180,17 +180,22 @@ glusterd_check_ganesha_export (glusterd_volinfo_t *volinfo) {          return is_exported;  } - +/* * + * The below function is called as part of commit phase for volume set option + * "ganesha.enable". If the value is "on", it creates export configuration file + * and then export the volume via dbus command. Incase of "off", the volume + * will be already unexported during stage phase, so it will remove the conf + * file from shared storage + */  int  glusterd_check_ganesha_cmd (char *key, char *value, char **errstr, dict_t *dict)  {          int                ret = 0; -        xlator_t                *this = NULL; +        char               *volname = NULL; -        this = THIS; -        GF_ASSERT (this);          GF_ASSERT (key);          GF_ASSERT (value); +        GF_ASSERT (dict);          if ((strcmp (key, "ganesha.enable") == 0)) {                  if ((strcmp (value, "on")) && (strcmp (value, "off"))) { @@ -199,15 +204,28 @@ glusterd_check_ganesha_cmd (char *key, char *value, char **errstr, dict_t *dict)                          ret = -1;                          goto out;                  } -                ret = glusterd_handle_ganesha_op (dict, errstr, key, value); -                if (ret) { -                        gf_msg (this->name, GF_LOG_ERROR, 0, -                                GD_MSG_NFS_GNS_OP_HANDLE_FAIL, -                                "Handling NFS-Ganesha" -                                " op failed."); -                } +                if (strcmp (value, "on") == 0) { +                        ret = glusterd_handle_ganesha_op (dict, errstr, key, +                                                        value); + +                 } else if (is_origin_glusterd (dict)) { +                        ret = dict_get_str (dict, "volname", &volname); +                        if (ret) { +                                gf_msg ("glusterd-ganesha", GF_LOG_ERROR, errno, +                                GD_MSG_DICT_GET_FAILED, +                                "Unable to get volume name"); +                                goto out; +                        } +                        ret = create_export_config (volname, "off", errstr); +                 }          }  out: +        if (ret) { +                gf_msg ("glusterd-ganesha", GF_LOG_ERROR, 0, +                        GD_MSG_NFS_GNS_OP_HANDLE_FAIL, +                        "Handling NFS-Ganesha" +                        " op failed."); +        }          return ret;  } @@ -415,7 +433,7 @@ check_host_list (void)  }  int -create_export_config (char *volname, char **op_errstr) +create_export_config (char *volname, char *value, char **op_errstr)  {          runner_t                runner                     = {0,};          int                     ret                        = -1; @@ -424,7 +442,7 @@ create_export_config (char *volname, char **op_errstr)          runinit (&runner);          runner_add_args (&runner, "sh",                          GANESHA_PREFIX"/create-export-ganesha.sh", -                        CONFDIR, volname, NULL); +                        CONFDIR, value, volname, NULL);          ret = runner_run(&runner);          if (ret) @@ -513,9 +531,12 @@ ganesha_manage_export (dict_t *dict, char *value, char **op_errstr)                  goto out;          } -        /* Create the export file only when ganesha.enable "on" is executed */ +        /* * +         * Create the export file from the node where ganesha.enable "on" +         * is executed +         * */           if (option) { -                ret  =  create_export_config (volname, op_errstr); +                ret  =  create_export_config (volname, "on", op_errstr);                  if (ret) {                          gf_msg (this->name, GF_LOG_ERROR, 0,                                  GD_MSG_EXPORT_FILE_CREATE_FAIL, @@ -811,11 +832,7 @@ glusterd_handle_ganesha_op (dict_t *dict, char **op_errstr,  {          int32_t                 ret          = -1; -        char                   *volname      = NULL; -        xlator_t               *this         = NULL;          gf_boolean_t           option        = _gf_false; -        static int             export_id     = 1; -        glusterd_volinfo_t     *volinfo      = NULL;          GF_ASSERT (dict);          GF_ASSERT (op_errstr); diff --git a/xlators/mgmt/glusterd/src/glusterd-op-sm.c b/xlators/mgmt/glusterd/src/glusterd-op-sm.c index f2f5a347b86..553b7b4a6cf 100644 --- a/xlators/mgmt/glusterd/src/glusterd-op-sm.c +++ b/xlators/mgmt/glusterd/src/glusterd-op-sm.c @@ -1060,6 +1060,12 @@ glusterd_op_stage_set_volume (dict_t *dict, char **op_errstr)                  if (ret)                          goto out; +                if ((strcmp (key, "ganesha.enable") == 0) && +                    (strcmp (value, "off") == 0)) { +                        ret = ganesha_manage_export (dict, "off", op_errstr); +                        if (ret) +                                goto out; +                }                  ret = glusterd_check_quota_cmd (key, value, errstr, sizeof (errstr));                  if (ret)                          goto out; diff --git a/xlators/mgmt/glusterd/src/glusterd.h b/xlators/mgmt/glusterd/src/glusterd.h index daec281d979..090092000ac 100644 --- a/xlators/mgmt/glusterd/src/glusterd.h +++ b/xlators/mgmt/glusterd/src/glusterd.h @@ -1069,6 +1069,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);  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);  | 
