diff options
Diffstat (limited to 'contrib/amd/scripts/test-attrcache.in')
-rwxr-xr-x | contrib/amd/scripts/test-attrcache.in | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/contrib/amd/scripts/test-attrcache.in b/contrib/amd/scripts/test-attrcache.in new file mode 100755 index 0000000..061308b --- /dev/null +++ b/contrib/amd/scripts/test-attrcache.in @@ -0,0 +1,135 @@ +#!/bin/sh +# Script to test the attribute cache behavior of the local OS client. +# If this script fails, it means that Amd cannot turn off the attrcache +# reliably on this host, and Amd therefore may not run reliably. See +# the README.attrcache file distributed with this am-utils. +# -Erez Zadok, September 29, 2005 + +# set PATH (must install am-utils first) +prefix=@prefix@ +exec_prefix=@exec_prefix@ +PATH=@sbindir@:@bindir@:/usr/ucb:/usr/bin:/bin:${PATH} +export PATH + +# test if amd is running +amq -p > /dev/null 2>&1 +if test $? = 0 +then + echo "### Amd already running... please shutdown Amd first" + exit 1 +fi + +mapfile="/tmp/amd.testmap.$$" +logfile="/var/log/amd" +delay=1 +a=/a + +CreateMap1 () { + echo "### Creating correct map" + cat - >$mapfile <<EOF +a type:=link;fs:=/tmp/a +EOF +} + +CreateMap2 () { + echo "### Creating weird map" + cat - >$mapfile <<EOF +a type:=link;fs:=/tmp/b +EOF +} + +StopAMD () { + ctl-amd stop +# do not delete files we may need to use to debug Amd +# rm -f /tmp/a /tmp/b $mapfile $logfile +} + +touch /tmp/a +touch /tmp/b + +CreateMap1 +echo amd -x all -D all -r -l $logfile $a $mapfile -cache:=mapdefault,sync +amd -x all -D all -r -l $logfile $a $mapfile -cache:=mapdefault,sync +sleep 3 # give amd chance to start properly +amq +inode_a=`ls -lLi /tmp/a | awk '{print $1}'` +inode_b=`ls -lLi /tmp/b | awk '{print $1}'` +ls -lLi $a/a +ls -lLi $a/b +ls -l $mapfile + +# how many times to try until we call it a success... +maxtry=10 +while test $maxtry -gt 0 +do + echo "$maxtry tries left ..." + let maxtry=maxtry-1 + amq + CreateMap1 + sleep $delay + + ls -l $mapfile + echo "### looking at a... should get a" + ino=`ls -lLi $a/a | awk '{print $1}'` + if test -z "$ino" + then + ls -li $a/a + amq + amq -m + stat $a + echo "a link does not exist!" + StopAMD + exit 1 + fi + if test $ino -ne $inode_a + then + ls -li $a/a + amq + amq -m + stat $a + echo "a link does not point to A!" + StopAMD + exit 1 + fi + +# Here is the main trick we try: force amd to flush one entry, then +# change the amd map on disk, and then see if the kernel will have +# flushed the attribute cache; if it did, then Amd will see the +# correctly changed map entry. + + amq -u $a/a + sleep $delay + stat $a + + CreateMap2 + sleep $delay + + ls -l $mapfile + echo "### looking at a... should get b" + ino=`ls -lLi $a/a | awk '{print $1}'` + if test -z "$ino" + then + ls -li $a/a + amq + amq -m + stat $a + echo "a link does not exist!" + StopAMD + exit 1 + fi + if test $ino -ne $inode_b + then + ls -li $a/a + amq + amq -m + stat $a + echo "a link does not point to B!" + StopAMD + exit 1 + fi + + amq -u $a/a + sleep $delay + stat $a +done +StopAMD |