summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--extras/Makefile.am2
-rwxr-xr-xextras/backend-xattr-sanitize.sh66
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 "$@"