diff options
Diffstat (limited to 'extras/hook-scripts/add-brick')
5 files changed, 245 insertions, 0 deletions
diff --git a/extras/hook-scripts/add-brick/Makefile.am b/extras/hook-scripts/add-brick/Makefile.am new file mode 100644 index 00000000000..6e2701e909e --- /dev/null +++ b/extras/hook-scripts/add-brick/Makefile.am @@ -0,0 +1,2 @@ +SUBDIRS = post pre +CLEANFILES = diff --git a/extras/hook-scripts/add-brick/post/Makefile.am b/extras/hook-scripts/add-brick/post/Makefile.am new file mode 100644 index 00000000000..12f510291a9 --- /dev/null +++ b/extras/hook-scripts/add-brick/post/Makefile.am @@ -0,0 +1 @@ +EXTRA_DIST = disabled-quota-root-xattr-heal.sh diff --git a/extras/hook-scripts/add-brick/post/disabled-quota-root-xattr-heal.sh b/extras/hook-scripts/add-brick/post/disabled-quota-root-xattr-heal.sh new file mode 100755 index 00000000000..1866f6abd7e --- /dev/null +++ b/extras/hook-scripts/add-brick/post/disabled-quota-root-xattr-heal.sh @@ -0,0 +1,141 @@ +#!/bin/sh + +##--------------------------------------------------------------------------- +## This script updates the 'limit-set' xattr on the newly added node. Please +## refer hook-scripts/add-brick/pre/S28Quota-root-xattr-heal.sh for the complete +## description. +## Do the following only if limit configured on root. +## 1. Do an auxiliary mount. +## 2. Get 'limit-set' xattr on root +## 3. Set xattrs with the same value on the root. +## 4. Disable itself +##--------------------------------------------------------------------------- + +QUOTA_CONFIG_XATTR="trusted.glusterfs.quota.limit-set"; +MOUNT_DIR=`mktemp --directory --tmpdir`; +OPTSPEC="volname:,version:,gd-workdir:,volume-op:" +PROGNAME="Quota-xattr-heal-add-brick" +VOL_NAME= +VERSION= +VOLUME_OP= +GLUSTERD_WORKING_DIR= +ENABLED_NAME="S28Quota-root-xattr-heal.sh" + + +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 +                 ;; +        --version) +                 shift +                 VERSION=$1 +                 ;; +         --gd-workdir) +                 shift +                 GLUSTERD_WORKING_DIR=$1 +                 ;; +         --volume-op) +                 shift +                 VOLUME_OP=$1 +                 ;; +        *) +                 shift +                 break +                 ;; +        esac +        shift +done +##---------------------------------------- + +ENABLED_STATE="$GLUSTERD_WORKING_DIR/hooks/$VERSION/$VOLUME_OP/post/$ENABLED_NAME" + + +FLAG=`gluster volume quota $VOL_NAME list / 2>&1 | grep \ +      '\(No quota configured on volume\)\|\(Limit not set\)'`; +if ! [ -z $FLAG ] +then +        ls $ENABLED_STATE; +        RET=$? +        if [ 0 -eq $RET ] +        then +                unlink $ENABLED_STATE; +                exit $? +        fi + +        exit $RET; +fi + +## ----------------------------------- +## Mount the volume in temp directory. +## ----------------------------------- +glusterfs -s localhost --volfile-id=$VOL_NAME --client-pid=-42 $MOUNT_DIR; +if [ 0 -ne $? ] +then +        exit $?; +fi +## ----------------------------------- + +## ------------------ +## Getfattr the value +## ------------------ +VALUE=`getfattr -n "$QUOTA_CONFIG_XATTR" -e hex --absolute-names $MOUNT_DIR \ +       2>&1 | grep $QUOTA_CONFIG_XATTR | awk -F'=' '{print $2}'` +RET=$? +if [ 0 -ne $RET ] +then +        ## Clean up and exit +        cleanup_mountpoint; + +        exit $RET; +fi +## ------------------ + +## --------- +## Set xattr +## --------- +setfattr -n "$QUOTA_CONFIG_XATTR" -v $VALUE $MOUNT_DIR; +RET=$? +if [ 0 -ne $RET ] +then +        ## Clean up and exit +        cleanup_mountpoint; + +        exit $RET; +fi +## --------- + +cleanup_mountpoint; + +## Disable +ls $ENABLED_STATE; +RET=$? +if [ 0 -eq $RET ] +then +        unlink $ENABLED_STATE; +        exit $? +fi +exit $? diff --git a/extras/hook-scripts/add-brick/pre/Makefile.am b/extras/hook-scripts/add-brick/pre/Makefile.am new file mode 100644 index 00000000000..4d22d3c489b --- /dev/null +++ b/extras/hook-scripts/add-brick/pre/Makefile.am @@ -0,0 +1 @@ +EXTRA_DIST = S28Quota-enable-root-xattr-heal.sh diff --git a/extras/hook-scripts/add-brick/pre/S28Quota-enable-root-xattr-heal.sh b/extras/hook-scripts/add-brick/pre/S28Quota-enable-root-xattr-heal.sh new file mode 100755 index 00000000000..2580a4c5885 --- /dev/null +++ b/extras/hook-scripts/add-brick/pre/S28Quota-enable-root-xattr-heal.sh @@ -0,0 +1,100 @@ +#!/bin/sh + +############################################################################### +## ---------------------------------------------------------------------------- +## The scripts +## I.   add-brick/pre/S28Quota-root-xattr-heal.sh (itself) +## II.  add-brick/post/disabled-root-xattr-heal.sh AND +## collectively acheives the job of healing the 'limit-set' xattr upon +## add-brick to the gluster volume. +## +## This script is the 'controlling' script. Upon add-brick this script enables +## the corresponding script based on the status of the volume. +## If volume is started - enable add-brick/post script +## else                 - enable start/post script. +## +## The enabling and disabling of a script is based on the glusterd's logic, +## that it only runs the scripts which starts its name with 'S'. So, +## Enable - symlink the file to 'S'*. +## Disable- unlink symlink +## ---------------------------------------------------------------------------- +############################################################################### + +OPTSPEC="volname:,version:,gd-workdir:,volume-op:" +PROGNAME="Quota-xattr-heal-add-brick-pre" +VOL_NAME= +GLUSTERD_WORKING_DIR= +VOLUME_OP= +VERSION= +ENABLED_NAME="S28Quota-root-xattr-heal.sh" +DISABLED_NAME="disabled-quota-root-xattr-heal.sh" + +enable () +{ +        ln -sf $DISABLED_STATE $1; +} + +##------------------------------------------ +## 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_WORKING_DIR=$1 +                 ;; +        --volume-op) +                 shift +                 VOLUME_OP=$1 +                 ;; +        --version) +                 shift +                 VERSION=$1 +                 ;; +        *) +                 shift +                 break +                 ;; +        esac +        shift +done +##---------------------------------------- + +DISABLED_STATE="$GLUSTERD_WORKING_DIR/hooks/$VERSION/add-brick/post/$DISABLED_NAME" +ENABLED_STATE_START="$GLUSTERD_WORKING_DIR/hooks/$VERSION/start/post/$ENABLED_NAME" +ENABLED_STATE_ADD_BRICK="$GLUSTERD_WORKING_DIR/hooks/$VERSION/add-brick/post/$ENABLED_NAME"; + +## Why to proceed if the required script itself is not present? +ls $DISABLED_STATE; +if [ 0 -ne $? ] +then +        exit $?; +fi + +## Is quota enabled? +FLAG=`cat $GLUSTERD_WORKING_DIR/vols/$VOL_NAME/info | grep "^features.quota" \ +      | awk -F'=' '{print $NF}'`; +if [ "$FLAG" != "on" ] +then +        exit $EXIT_SUCCESS; +fi + +## Is volume started? +FLAG=`cat $GLUSTERD_WORKING_DIR/vols/$VOL_NAME/info | grep "^status" \ +      | awk -F'=' '{print $NF}'`; +if [ "$FLAG" != "1" ] +then +        enable $ENABLED_STATE_START; +        exit $? +fi + +enable $ENABLED_STATE_ADD_BRICK; +exit $?  | 
