From d60402542c7f20567a36b35040b1705906fabe20 Mon Sep 17 00:00:00 2001 From: rread Date: Fri, 8 Aug 2003 10:04:38 +0000 Subject: [PATCH] * add keepopen.py, which holds a file open until it recieves a SIGUSR1, then it reads the file and closes it, returning an error if anything fails. * replay_single.sh/test_8 uses keepopen to test close replay after unlink. So far, the test actually passes, but from reading the log I can see the MDS_CLOSE is not replayed, because it doesn't get a transno. Not sure how to actually test for this. --- lustre/tests/keepopen.py | 30 ++++++++++++++++++++++++++++++ lustre/tests/replay-dual.sh | 1 + lustre/tests/replay-single.sh | 25 +++++++++++++++++++++++-- 3 files changed, 54 insertions(+), 2 deletions(-) create mode 100755 lustre/tests/keepopen.py diff --git a/lustre/tests/keepopen.py b/lustre/tests/keepopen.py new file mode 100755 index 0000000..fbde2d0 --- /dev/null +++ b/lustre/tests/keepopen.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python + +import os, signal, sys, time + +# recieved after the file has been deleted +# attempt to read the file and exit with status +def sigusr1(signum, frame): + try: + data = f.read() + except Exception, e: + print "keepopen: read failed", e + sys.exit(1) + + f.close() + if data == tag: + print "keepopen: success: ", data + sys.exit(0) + else: + print "keepopen: bad data: ", data + sys.exit(2) + +signal.signal(signal.SIGUSR1, sigusr1) + +tag = "test data" +filename = sys.argv[1] +os.system("echo -n %s > %s" %(tag, filename)) + +f = open(filename, 'r') +while 1: + time.sleep(10) diff --git a/lustre/tests/replay-dual.sh b/lustre/tests/replay-dual.sh index 15a1af0..108c60c 100755 --- a/lustre/tests/replay-dual.sh +++ b/lustre/tests/replay-dual.sh @@ -41,6 +41,7 @@ replay_barrier() { sync lctl --device %${dev}1 readonly lctl --device %${dev}1 notransno + lctl mark "REPLAY BARRIER" } fail() { diff --git a/lustre/tests/replay-single.sh b/lustre/tests/replay-single.sh index 7b20f87..0c65a31 100755 --- a/lustre/tests/replay-single.sh +++ b/lustre/tests/replay-single.sh @@ -43,6 +43,7 @@ replay_barrier() { sync lctl --device %${dev}1 readonly lctl --device %${dev}1 notransno + lctl mark "REPLAY BARRIER" } fail() { @@ -131,7 +132,7 @@ EQUALS="======================================================================" run_one() { testnum=$1 message=$2 - + # Pretty tests run faster. echo -n '=====' $testnum: $message local suffixlen=`echo -n $2 | awk '{print 65 - length($0)}'` @@ -237,8 +238,28 @@ test_7() { } run_test 7 "create open write rename |X| create-old-name read" +test_8() { + keepopen.py $MOUNTPT/f8 & + pid=$! + # wait until keepopen has created the file + while [ ! -e $MOUNTPT/f8 ]; do sleep 1; done + mcreate $MOUNTPT/f8b + rm -f $MOUNTPT/f8 + replay_barrier mds + kill -USR1 $pid + wait $pid || return 6 + + fail mds + [ -e $MOUNTPT/f8 ] && return 7 + rm $MOUNTPT/f8b + [ -e $MOUNTPT/f8b ] && return 8 + return 0 +} +run_test 8 "open, unlink |X| close" + + stop client $CLIENTLCONFARGS stop ost -stop mds $MDSLCONFARGS +stop mds $MDSLCONFARGS --dump cleanup.log trap - EXIT -- 1.8.3.1