Whamcloud - gitweb
* add keepopen.py, which holds a file open until it recieves a
authorrread <rread>
Fri, 8 Aug 2003 10:04:38 +0000 (10:04 +0000)
committerrread <rread>
Fri, 8 Aug 2003 10:04:38 +0000 (10:04 +0000)
  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 [new file with mode: 0755]
lustre/tests/replay-dual.sh
lustre/tests/replay-single.sh

diff --git a/lustre/tests/keepopen.py b/lustre/tests/keepopen.py
new file mode 100755 (executable)
index 0000000..fbde2d0
--- /dev/null
@@ -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)
index 15a1af0..108c60c 100755 (executable)
@@ -41,6 +41,7 @@ replay_barrier() {
     sync
     lctl --device %${dev}1 readonly
     lctl --device %${dev}1 notransno
+    lctl mark "REPLAY BARRIER"
 }
 
 fail() {
index 7b20f87..0c65a31 100755 (executable)
@@ -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