Whamcloud - gitweb
- added test_3b which emulates recursive mount. Does not pass yet.
[fs/lustre-release.git] / lustre / tests / lockorder.sh
1 #!/bin/sh
2 set -e
3
4 export PATH=`dirname $0`:`dirname $0`/../utils:$PATH
5 CREATEMANY=${CREATEMANY:-createmany}
6 STATMANY=${STATMANY:-statmany}
7 UNLINKMANY=${UNLINKMANY:-unlinkmany}
8 LCTL=${LCTL:-lctl}
9
10 MOUNT1=${MOUNT1:-/mnt/lustre1}
11 MOUNT2=${MOUNT2:-/mnt/lustre2}
12 DIR=${DIR:-$MOUNT1}
13 DIR2=${DIR2:-$MOUNT2}
14 COUNT=${COUNT:-100}
15
16 cleanup() {
17         [ $CR_PID ] && kill -9 $CR_PID
18 }
19
20 trap cleanup 0
21
22 LOCKDIR=$DIR/lockdir
23 LOCKFILE=$LOCKDIR/lockfile
24 rm -rf $LOCKDIR
25
26 NUM=0
27
28 MINDIR=$DIR
29 MAXDIR=$DIR
30 MINRES=2000000000
31 MAXRES=0
32 mkdir -p $MINDIR
33 while [ $MINRES -gt $MAXRES ]; do
34         FILETMP=$MINDIR/f$$${NUM}
35         DIRTMP=$MAXDIR/d$$${NUM}
36         touch $FILETMP
37         mkdir -p $DIRTMP
38         FILERES=`ls -id $FILETMP | awk '{ print $1 }'`
39         DIRRES=`ls -id $DIRTMP | awk '{ print $1 }'`
40         if [ $DIRRES -gt $MAXRES ]; then
41                 MAXDIR=$DIRTMP
42                 MAXRES=$DIRRES
43         fi
44         if [ $FILERES -lt $MINRES ]; then
45                 [ -f "$MINFILE" ] && rm $MINFILE
46                 MINFILE=$FILETMP
47                 MINRES=$FILERES
48         else
49                 rm $FILETMP
50         fi
51         NUM=$(($NUM + 1))
52 done
53
54 mv $MAXDIR $LOCKDIR
55 mv $MINFILE $LOCKFILE
56 rm -rf $DIR/d$$*
57
58 $LCTL mark "start dir: $LOCKDIR=$MAXRES file: $LOCKFILE=$MINRES"
59 # link will lock $LOCKFILE and $DIR as it creates ${LOCKFILE}{0,1,...}
60 $CREATEMANY -l$LOCKFILE $LOCKFILE -$COUNT &
61 CR_PID=$!
62
63 while ! test -f ${LOCKFILE}1 ; do
64        sleep 1
65 done
66
67 # this will lock $DIR and ${LOCKFILE}0
68 $STATMANY -s $DIR2/lockdir/lockfile 1 -$COUNT &
69 ST_PID=$!
70
71 sleep $(($COUNT / 2))
72
73 $UNLINKMANY $DIR2/lockdir/lockfile 1 $(($COUNT * 1000)) || true
74
75 trap 0
76 kill $CR_PID || true
77 kill $ST_PID || true
78
79 rm -rf $LOCKDIR