diff options
-rw-r--r-- | extras/Makefile.am | 2 | ||||
-rwxr-xr-x | extras/backend-xattr-sanitize.sh | 66 |
2 files changed, 67 insertions, 1 deletions
diff --git a/extras/Makefile.am b/extras/Makefile.am index d95880c5356..9be3973002a 100644 --- a/extras/Makefile.am +++ b/extras/Makefile.am @@ -5,7 +5,7 @@ EditorMode_DATA = glusterfs-mode.el glusterfs.vim SUBDIRS = init.d benchmarking -EXTRA_DIST = specgen.scm MacOSX/Portfile glusterfs-mode.el glusterfs.vim migrate-unify-to-distribute.sh +EXTRA_DIST = specgen.scm MacOSX/Portfile glusterfs-mode.el glusterfs.vim migrate-unify-to-distribute.sh backend-xattr-sanitize.sh CLEANFILES = diff --git a/extras/backend-xattr-sanitize.sh b/extras/backend-xattr-sanitize.sh new file mode 100755 index 00000000000..3967654cf47 --- /dev/null +++ b/extras/backend-xattr-sanitize.sh @@ -0,0 +1,66 @@ +#!/bin/sh + +# Each entry in the array below is a regular expression to match stale keys + +xs=("trusted.glusterfs.createtime" + "trusted.glusterfs.version" + "trusted.glusterfs.afr.data-pending" + "trusted.glusterfs.afr.metadata-pending" + "trusted.glusterfs.afr.entry-pending") + +absolute_path() +{ + local dir=$(dirname "$1"); + local base=$(basename "$1"); + cd "$dir"; + echo $(pwd)/"$base"; + cd - >/dev/null; +} + + +cleanup() +{ + sanitizee=$(absolute_path "$1"); + + stale_keys=$( + for pattern in ${xs[@]}; do + getfattr -d -m "$pattern" "$sanitizee" 2>/dev/null | + grep = | cut -f1 -d=; + done + ) + + if [ -z "$stale_keys" ]; then + return; + fi + + for key in $stale_keys; do + echo "REMOVEXATTR ($key) $sanitizee"; + setfattr -x "$key" "$sanitizee"; + done +} + + +crawl() +{ + this_script=$(absolute_path "$0"); + + export sanitize=yes; + find "$1" -exec "$this_script" {} \; +} + + +main() +{ + if [ -z "$1" ]; then + echo "Usage: $0 <export-dir>" + return 1 + fi + + if [ "$sanitize" = "yes" ]; then + cleanup "$@"; + else + crawl "$@"; + fi +} + +main "$@" |