diff options
| -rw-r--r-- | extras/hook-scripts/add-brick/post/Makefile.am | 4 | ||||
| -rwxr-xr-x | extras/hook-scripts/add-brick/post/S13create-subdir-mounts.sh | 86 | ||||
| -rw-r--r-- | glusterfs.spec.in | 3 | ||||
| -rw-r--r-- | tests/features/subdir-mount.t | 16 | 
4 files changed, 94 insertions, 15 deletions
diff --git a/extras/hook-scripts/add-brick/post/Makefile.am b/extras/hook-scripts/add-brick/post/Makefile.am index c1fcf50f05f..bfc0c1cf080 100644 --- a/extras/hook-scripts/add-brick/post/Makefile.am +++ b/extras/hook-scripts/add-brick/post/Makefile.am @@ -1,6 +1,6 @@ -EXTRA_DIST = disabled-quota-root-xattr-heal.sh +EXTRA_DIST = disabled-quota-root-xattr-heal.sh S13create-subdir-mounts.sh  hookdir = $(GLUSTERD_WORKDIR)/hooks/1/add-brick/post/  if WITH_SERVER -hook_SCRIPTS = disabled-quota-root-xattr-heal.sh +hook_SCRIPTS = disabled-quota-root-xattr-heal.sh S13create-subdir-mounts.sh  endif diff --git a/extras/hook-scripts/add-brick/post/S13create-subdir-mounts.sh b/extras/hook-scripts/add-brick/post/S13create-subdir-mounts.sh new file mode 100755 index 00000000000..95e624e3442 --- /dev/null +++ b/extras/hook-scripts/add-brick/post/S13create-subdir-mounts.sh @@ -0,0 +1,86 @@ +#!/bin/bash + +##--------------------------------------------------------------------------- +## This script runs the self-heal of the directories which are expected to +## be present as they are mounted as subdirectory mounts. +##--------------------------------------------------------------------------- + +MOUNT_DIR=`mktemp -d -t ${0##*/}.XXXXXX`; +OPTSPEC="volname:,go-workdir" +PROGNAME="add-brick-create-subdir" +VOL_NAME=test +GLUSTERD_WORKDIR="/var/lib/glusterd" + +cleanup_mountpoint () +{ +        umount -f $MOUNT_DIR; +        if [ 0 -ne $? ] +        then +                return $? +        fi + +        rmdir $MOUNT_DIR; +        if [ 0 -ne $? ] +        then +                return $? +        fi +} + +##------------------------------------------ +## Parse the arguments +##------------------------------------------ +ARGS=$(getopt -l $OPTSPEC  -name $PROGNAME $@) +eval set -- "$ARGS" + +while true; +do +    case $1 in +        --volname) +            shift +            VOL_NAME=$1 +            ;; +        --gd-workdir) +            shift +            GLUSTERD_WORKDIR=$1 +            ;; +	--version) +	    shift +	    ;; +	--volume-op) +	    shift +	    ;; +	*) +	    shift +	    break +	    ;; +    esac +    shift +done + +## See if we have any subdirs to be healed before going further +subdirs=$(grep 'auth.allow' ${GLUSTERD_WORKDIR}/vols/${VOL_NAME}/info | cut -f2 -d'=' | tr ',' '\n' | cut -f1 -d'('); + +if [ -z ${subdirs} ]; then +    rmdir $MOUNT_DIR; +    exit 0; +fi + +##---------------------------------------- +## Mount the volume in temp directory. +## ----------------------------------- +glusterfs -s localhost --volfile-id=$VOL_NAME --client-pid=-50 $MOUNT_DIR; +if [ 0 -ne $? ] +then +    exit $?; +fi + +## ----------------------------------- +# Do the 'stat' on all the directory for now. Ideal fix is to look at subdir +# list from 'auth.allow' option and only stat them. +for subdir in ${subdirs} +do +    stat ${MOUNT_DIR}/${subdir} > /dev/null; +done + +## Clean up and exit +cleanup_mountpoint; diff --git a/glusterfs.spec.in b/glusterfs.spec.in index c147dd9bc2d..d7938c24edd 100644 --- a/glusterfs.spec.in +++ b/glusterfs.spec.in @@ -1377,8 +1377,9 @@ exit 0         %dir %attr(0755,-,-) %{_sharedstatedir}/glusterd/hooks/1/add-brick         %dir %attr(0755,-,-) %{_sharedstatedir}/glusterd/hooks/1/add-brick/post              %attr(0755,-,-) %{_sharedstatedir}/glusterd/hooks/1/add-brick/post/disabled-quota-root-xattr-heal.sh -            %attr(0755,-,-) %{_sharedstatedir}/glusterd/hooks/1/add-brick/pre/S28Quota-enable-root-xattr-heal.sh +            %attr(0755,-,-) %{_sharedstatedir}/glusterd/hooks/1/add-brick/post/S13create-subdir-mounts.sh         %dir %attr(0755,-,-) %{_sharedstatedir}/glusterd/hooks/1/add-brick/pre +            %attr(0755,-,-) %{_sharedstatedir}/glusterd/hooks/1/add-brick/pre/S28Quota-enable-root-xattr-heal.sh         %dir %attr(0755,-,-) %{_sharedstatedir}/glusterd/hooks/1/create         %dir %attr(0755,-,-) %{_sharedstatedir}/glusterd/hooks/1/create/post              %attr(0755,-,-) %{_sharedstatedir}/glusterd/hooks/1/create/post/S10selinux-label-brick.sh diff --git a/tests/features/subdir-mount.t b/tests/features/subdir-mount.t index 1742f8655e8..8401946fb0f 100644 --- a/tests/features/subdir-mount.t +++ b/tests/features/subdir-mount.t @@ -98,22 +98,14 @@ TEST test "$mount_inode" == "1"  TEST umount $M2 -# because the subdir is not yet 'healed', below should fail. +# Now the exported subdirs should be automatically healed due to +# hook scripts. Check if the mount is successful.  TEST $GFS --subdir-mount /subdir2 -s $H0 --volfile-id $V0 $M2  mount_inode=$(stat --format "%i" "$M2") -TEST test "$mount_inode" != "1" - -# Allow the heal to complete -TEST stat $M0/subdir1/subdir1.1/subdir1.2/subdir1.2_file; -TEST stat $M0/subdir2/ - -# Now the mount should succeed -TEST $GFS --subdir-mount /subdir2 -s $H0 --volfile-id $V0 $M1 -TEST stat $M1 +TEST test "$mount_inode" == "1" -# umount $M1 / $M2  TEST umount $M0 -TEST umount $M1 +TEST umount $M2  TEST $CLI volume stop $V0;  | 
