From e66adead7078163cd9d9c0bbd8ec6289b4e4ea35 Mon Sep 17 00:00:00 2001 From: Pavan Sondur Date: Tue, 9 Mar 2010 02:37:30 +0000 Subject: extras: Add script to be used before using quota translator. Signed-off-by: Pavan Vilas Sondur Signed-off-by: Anand V. Avati BUG: 569 (Memory leak in quota translator) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=569 --- extras/Makefile.am | 2 +- extras/disk_usage_sync.sh | 86 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+), 1 deletion(-) create mode 100755 extras/disk_usage_sync.sh (limited to 'extras') diff --git a/extras/Makefile.am b/extras/Makefile.am index 8ad2f6302ff..c11137143b5 100644 --- a/extras/Makefile.am +++ b/extras/Makefile.am @@ -5,5 +5,5 @@ EditorMode_DATA = glusterfs-mode.el glusterfs.vim SUBDIRS = init.d benchmarking volgen -EXTRA_DIST = specgen.scm MacOSX/Portfile glusterfs-mode.el glusterfs.vim migrate-unify-to-distribute.sh backend-xattr-sanitize.sh backend-cleanup.sh defrag.sh scale-n-defrag.sh +EXTRA_DIST = specgen.scm MacOSX/Portfile glusterfs-mode.el glusterfs.vim migrate-unify-to-distribute.sh backend-xattr-sanitize.sh backend-cleanup.sh defrag.sh scale-n-defrag.sh disk_usage_sync.sh diff --git a/extras/disk_usage_sync.sh b/extras/disk_usage_sync.sh new file mode 100755 index 00000000000..85ee158f888 --- /dev/null +++ b/extras/disk_usage_sync.sh @@ -0,0 +1,86 @@ +#!/bin/sh + +# This script can be used to sync disk usage before activating quotas on GlusterFS. +# There are two scenarios where quotas are used and this script has to be used accordingly - +# +# 1. Server side +# The script needs to be run with backend export directory as the argument. This script updates +# the current disk usage of the backend directory in a way that is intelligible to the GlusterFS quota +# translator. Make sure you run this script before starting glusterfsd (GlusterFS server process): +# * for the first time +# * after any server outage (reboot, etc.) + +# 2. Client side +# The script needs to be run with the client mount point as the argument. It updates the current disk +# of the GlusterFS volume is a way that is intelligible to the GlusterFS quota translator. Make sure +# you run this script after a fresh mount of the GlusterFS volume on the client: +# * For the first time +# * After any client outage (reboot, remount, etc.) + +# Please note that this script is dependent on the 'attr' package, more specifically 'setfattr' to set +# extended attributes of files. +# GlusterFS +# +# (c) 2010 Gluster Inc + +PROGRAM_NAME="disk_usage_sync.sh" + +#check if setfattr is available +check_for_attr () +{ + `command -v setfattr >/dev/null` + if [ "${?}" -gt 0 ]; then + echo >&2 "This script requires the 'attr' package to run. Either it has not been installed or is not present currently in the system path." + exit 1 + fi + +} + +usage () { + echo >&2 "$PROGRAM_NAME - Command used to sync disk usage information before activating quotas on GlusterFS. + +usage: $PROGRAM_NAME " + +exit 1 +} + +TARGET_DIR=$1 +EXT_ATTR_NAME="trusted.glusterfs-quota-du" + +#output of du in number of bytes +get_disk_usage () +{ + if [ ! -d $TARGET_DIR ]; then + echo >&2 "Error: $TARGET_DIR does not exist." + exit 1 + fi + + DISK_USAGE=`du -bc $TARGET_DIR | grep 'total' | cut -f1` + if [ "${?}" -gt 0 ]; then + exit 1 + fi + +} + +#set the extended attribute of the root directory with du size in bytes +set_disk_usage () +{ + ` setfattr -n $EXT_ATTR_NAME -v $DISK_USAGE $TARGET_DIR` + if [ "${?}" -gt 0 ]; then + exit 1 + fi +} + +main () +{ + [ $# -lt 1 ] && usage + + check_for_attr + + get_disk_usage + set_disk_usage + + printf "Disk Usage information has been sync'd successfully.\n" +} + +main "$@" -- cgit