Whamcloud - gitweb
Add lock-order regression test.
authoradilger <adilger>
Thu, 11 Dec 2003 22:33:40 +0000 (22:33 +0000)
committeradilger <adilger>
Thu, 11 Dec 2003 22:33:40 +0000 (22:33 +0000)
b=1844

lustre/tests/lockorder.sh [new file with mode: 0644]

diff --git a/lustre/tests/lockorder.sh b/lustre/tests/lockorder.sh
new file mode 100644 (file)
index 0000000..1678a39
--- /dev/null
@@ -0,0 +1,77 @@
+#!/bin/sh
+set -e
+
+export PATH=`dirname $0`:$PATH
+CREATEMANY=${CREATEMANY:-createmany}
+STATMANY=${STATMANY:-statmany}
+UNLINKMANY=${UNLINKMANY:-unlinkmany}
+LCTL=${LCTL:-lctl}
+
+MOUNT1=${MOUNT1:-/mnt/lustre1}
+MOUNT2=${MOUNT2:-/mnt/lustre2}
+DIR=${DIR:-$MOUNT1}
+DIR2=${DIR2:-$MOUNT2}
+COUNT=${COUNT:-100}
+
+cleanup() {
+       [ $CR_PID ] && kill -9 $CR_PID
+}
+
+trap cleanup 0
+
+LOCKDIR=$DIR/lockdir
+LOCKFILE=$LOCKDIR/lockfile
+rm -rf $LOCKDIR
+
+NUM=0
+
+MINDIR=$DIR
+MAXDIR=$DIR
+MINRES=2000000000
+MAXRES=0
+mkdir -p $MINDIR
+while [ $MINRES -gt $MAXRES ]; do
+       FILETMP=$MINDIR/f$$${NUM}
+       DIRTMP=$MAXDIR/d$$${NUM}
+       touch $FILETMP
+       mkdir -p $DIRTMP
+       FILERES=`ls -id $FILETMP | awk '{ print $1 }'`
+       DIRRES=`ls -id $DIRTMP | awk '{ print $1 }'`
+       if [ $DIRRES -gt $MAXRES ]; then
+               MAXDIR=$DIRTMP
+               MAXRES=$DIRRES
+       fi
+       if [ $FILERES -lt $MINRES ]; then
+               [ -f "$MINFILE" ] && rm $MINFILE
+               MINFILE=$FILETMP
+               MINRES=$FILERES
+       else
+               rm $TMPFILE
+       fi
+       NUM=$(($NUM + 1))
+done
+
+mv $MAXDIR $LOCKDIR
+mv $MINFILE $LOCKFILE
+rm -rf $DIR/d$$*
+
+$LCTL mark "start dir: $LOCKDIR=$MAXRES file: $LOCKFILE=$MINRES"
+# link will lock $LOCKFILE and $DIR as it creates ${LOCKFILE}{0,1,...}
+$CREATEMANY -l$LOCKFILE $LOCKFILE -$COUNT &
+CR_PID=$!
+
+sleep 1
+
+# this will lock $DIR and ${LOCKFILE}0
+$STATMANY -s $DIR2/lockdir/lockfile 1 -$COUNT &
+ST_PID=$!
+
+sleep $(($COUNT / 2))
+
+$UNLINKMANY $DIR2/lockdir/lockfile 1 $(($COUNT * 1000)) || true
+
+trap 0
+kill $CR_PID || true
+kill $ST_PID || true
+
+#rm -r $PDIR