summaryrefslogtreecommitdiffstats
path: root/extras/glusterfs-defrag.in
diff options
context:
space:
mode:
Diffstat (limited to 'extras/glusterfs-defrag.in')
-rw-r--r--extras/glusterfs-defrag.in123
1 files changed, 0 insertions, 123 deletions
diff --git a/extras/glusterfs-defrag.in b/extras/glusterfs-defrag.in
deleted file mode 100644
index 68a393f1c3a..00000000000
--- a/extras/glusterfs-defrag.in
+++ /dev/null
@@ -1,123 +0,0 @@
-#!/bin/bash
-
-# Please leave 'added_bricks' as empty if you want 100% defrag.
-# If you want to move data to newly added bricks, properly give
-# brick info as "<hostname>:<export-dir>" form (which was given
-# in 'gluster volume create' command)
-# More than one brick can be given with space inbetween.
-
-#
-# (c) 2010 Gluster Inc <http://www.gluster.com/>
-#
-
-set -e;
-
-#
-#added_bricks="node1:/gfs/export1"
-#
-added_bricks=""
-
-CP="cp"
-MV="mv"
-
-scan_dir()
-{
- path=$1;
- # run defrag on files first #
- find "$path" -maxdepth 1 -type f -perm +01000 -exec $0 '{}' \;
-
- for subdir in $(find "$path" -maxdepth 1 -type d | sed 1d); do
- $0 "$subdir";
- done
-}
-
-fix_xattr()
-{
- path=$1;
- getfattr -n trusted.distribute.fix.layout "$path" 2>/dev/null;
-}
-
-rsync_filename()
-{
- path=$1
- dir=$(dirname "$path");
- file=$(basename "$path");
-
- echo "$dir/.$file.zr$$";
-}
-
-relocate_file()
-{
- path=$1;
-
- # Make sure we don't 'defrag' valid file.
- stat_info=$(stat -c '%a' "$path");
- if [ $stat_info -lt 1000 ] ; then
- return;
- fi
-
- size=$(stat -c '%s' "$path");
-
- # If there are some entries in added_bricks, then check
- # if the link file is present on those nodes, if not,
- # set flag=1, so full defrag happens
-
- flag=0;
- for bricks in ${added_bricks}; do
- linknode=$(getfattr --only-values -n trusted.distribute.linkinfo $path 2>/dev/null);
- if [ -z $linknode ] ; then
- return;
- fi
- current_brick=${linknode:0:${#bricks}};
- if [ "${bricks}" == "${current_brick}" ]; then
- flag=1;
- fi
- done
-
- if [ -z ${added_bricks} ] ; then
- flag=1;
- fi
-
- if [ $flag -ne 1 ]; then
- return;
- fi
-
- tmp_path=$(rsync_filename "$path");
-
- pre_mtime=$(stat -c '%Y' "$path");
- $CP -a "$path" "$tmp_path";
- post_mtime=$(stat -c '%Y' "$path");
-
- if [ $pre_mtime = $post_mtime ]; then
- chmod -t "$tmp_path";
- $MV "$tmp_path" "$path";
- echo "file '$path' relocated"
- else
- echo "file '$path' modified during defrag. skipping"
- rm -f "$tmp_path";
- fi
-}
-
-defrag_usage()
-{
- echo "Usage: $0 <directory>"
-}
-
-main()
-{
- path="$1";
-
- if [ -z "$path" ]; then
- defrag_usage;
- return;
- fi
-
- if [ -d "$path" ]; then
- fix_xattr "$path";
- scan_dir "$path";
- else
- relocate_file "$@";
- fi
-}
-
-main "$1"