Whamcloud - gitweb
LU-12195 tests: use sleep instead of wrapped multiop 55/34955/5
authorAlex Zhuravlev <bzzz@whamcloud.com>
Fri, 14 Jun 2019 04:43:47 +0000 (21:43 -0700)
committerOleg Drokin <green@whamcloud.com>
Fri, 28 Jun 2019 16:34:02 +0000 (16:34 +0000)
in sanity/43* and sanity/14* tests as multiop is not a binary,
but libtool-wrapped script. the tests fail when started from a
build tree.

Lustre-commit: 9a1f327a76f72c7713e53d8b354ff7f0e32be870
Lustre-change: https://review.whamcloud.com/34721

LU-12261 tests: Race between exec and truncate

Execing '$tdir/sleep' with & doesn't guarantee the file is
actually open before returning, so it is sometimes losing
the race with truncate, resulting in errors like this:
/usr/lib64/lustre/tests/sanity.sh: line 4172:
/mnt/lustre/d43b.sanity/sleep: Text file busy

Where $tdir/sleep gets ETXTBSY, instead of truncate as
expected.

A 1 second delay should be enough to guarantee exec wins
the race vs truncate.

Test-Parameters: trivial
Test-Parameters: testgroup=review-ldiskfs-arm
Test-Parameters: testgroup=review-ldiskfs
Test-Parameters: testgroup=review-ldiskfs-arm

Lustre-commit: c64855fca1504bddcb0fc7ad7316d8d6b20a9c6f
Lustre-change: https://review.whamcloud.com/34791

Change-Id: Iaec3433f03aab23583052373e5f0252d9eac7f04
Signed-off-by: Alex Zhuravlev <bzzz@whamcloud.com>
Signed-off-by: Patrick Farrell <pfarrell@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: James Simmons <uja.ornl@yahoo.com>
Reviewed-by: James Nunez <jnunez@whamcloud.com>
Reviewed-on: https://review.whamcloud.com/34955
Tested-by: Jenkins
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Yang Sheng <ys@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/tests/sanity.sh
lustre/tests/sanityn.sh

index a289516..386b668 100755 (executable)
@@ -4144,15 +4144,13 @@ run_test 43A "execution of file opened for write should return -ETXTBSY"
 
 test_43a() {
        test_mkdir $DIR/$tdir
-       cp -p $(which $MULTIOP) $DIR/$tdir/multiop ||
-               cp -p multiop $DIR/$tdir/multiop
-       MULTIOP_PROG=$DIR/$tdir/multiop multiop_bg_pause $TMP/$tfile.junk O_c ||
-               error "multiop open $TMP/$tfile.junk failed"
-       rm $TMP/$tfile.junk     # delete junk file on close (not part of test)
-       MULTIOP_PID=$!
-       $MULTIOP $DIR/$tdir/multiop Oc && error "expected error, got success"
-       kill -USR1 $MULTIOP_PID || error "kill -USR1 PID $MULTIOP_PID failed"
-       wait $MULTIOP_PID || error "wait PID $MULTIOP_PID failed"
+       cp -p $(which sleep) $DIR/$tdir/sleep || error "can't copy"
+       $DIR/$tdir/sleep 60 &
+       SLEEP_PID=$!
+       # Make sure exec of $tdir/sleep wins race with truncate
+       sleep 1
+       $MULTIOP $DIR/$tdir/sleep Oc && error "expected error, got success"
+       kill $SLEEP_PID
 }
 run_test 43a "open(RDWR) of file being executed should return -ETXTBSY"
 
@@ -4160,15 +4158,13 @@ test_43b() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run"
 
        test_mkdir $DIR/$tdir
-       cp -p $(which $MULTIOP) $DIR/$tdir/multiop ||
-               cp -p multiop $DIR/$tdir/multiop
-       MULTIOP_PROG=$DIR/$tdir/multiop multiop_bg_pause $TMP/$tfile.junk O_c ||
-               error "multiop open $TMP/$tfile.junk failed"
-       rm $TMP/$tfile.junk     # delete junk file on close (not part of test)
-       MULTIOP_PID=$!
-       $TRUNCATE $DIR/$tdir/multiop 0 && error "expected error, got success"
-       kill -USR1 $MULTIOP_PID || error "kill -USR1 PID $MULTIOP_PID failed"
-       wait $MULTIOP_PID || error "wait PID $MULTIOP_PID failed"
+       cp -p $(which sleep) $DIR/$tdir/sleep || error "can't copy"
+       $DIR/$tdir/sleep 60 &
+       SLEEP_PID=$!
+       # Make sure exec of $tdir/sleep wins race with truncate
+       sleep 1
+       $TRUNCATE $DIR/$tdir/sleep 0 && error "expected error, got success"
+       kill $SLEEP_PID
 }
 run_test 43b "truncate of file being executed should return -ETXTBSY"
 
index a725622..cc85077 100755 (executable)
@@ -317,65 +317,52 @@ test_14aa() {
        MULTIPID=$!
 
        $DIR2/$tdir/$tfile && error || true
-       kill -USR1 $MULTIPID
-       wait $MULTIPID || return 2
+       kill $MULTIPID
 }
 run_test 14aa "execution of file open for write returns -ETXTBSY"
 
 test_14ab() {
        test_mkdir $DIR1/$tdir
-       cp -p $(which multiop) $DIR1/$tdir/multiop || error "cp failed"
-       MULTIOP_PROG=$DIR1/$tdir/multiop multiop_bg_pause $TMP/$tfile O_c ||
-               return 1
-       MULTIOP_PID=$!
-       $MULTIOP $DIR2/$tdir/multiop Oc && error "expected error, got success"
-       kill -USR1 $MULTIOP_PID || return 2
-       wait $MULTIOP_PID || return 3
-       rm $TMP/$tfile $DIR1/$tdir/multiop || error "removing multiop"
+       cp -p $(which sleep) $DIR1/$tdir/sleep || error "cp failed"
+       $DIR1/$tdir/sleep 60 &
+       SLEEP_PID=$!
+       $MULTIOP $DIR2/$tdir/sleep Oc && error "expected error, got success"
+       kill $SLEEP_PID
 }
 run_test 14ab "open(RDWR) of executing file returns -ETXTBSY"
 
 test_14b() { # bug 3192, 7040
        test_mkdir $DIR1/$tdir
-       cp -p $(which multiop) $DIR1/$tdir/multiop || error "cp failed"
-       MULTIOP_PROG=$DIR1/$tdir/multiop multiop_bg_pause $TMP/$tfile O_c ||
-               return 1
-       MULTIOP_PID=$!
-       $TRUNCATE $DIR2/$tdir/multiop 0 && kill -9 $MULTIOP_PID && \
+       cp -p $(which sleep) $DIR1/$tdir/sleep || error "cp failed"
+       $DIR1/$tdir/sleep 60 &
+       SLEEP_PID=$!
+       $TRUNCATE $DIR2/$tdir/sleep 60 && kill -9 $SLEEP_PID && \
                error "expected truncate error, got success"
-       kill -USR1 $MULTIOP_PID || return 2
-       wait $MULTIOP_PID || return 3
-       cmp $(which multiop) $DIR1/$tdir/multiop || error "binary changed"
-       rm $TMP/$tfile $DIR1/$tdir/multiop || error "removing multiop"
+       kill $SLEEP_PID
+       cmp $(which sleep) $DIR1/$tdir/sleep || error "binary changed"
 }
 run_test 14b "truncate of executing file returns -ETXTBSY ======"
 
 test_14c() { # bug 3430, 7040
        test_mkdir $DIR1/$tdir
-       cp -p $(which multiop) $DIR1/$tdir/multiop || error "cp failed"
-       MULTIOP_PROG=$DIR1/$tdir/multiop multiop_bg_pause $TMP/$tfile O_c ||
-               return 1
-       MULTIOP_PID=$!
-       cp /etc/hosts $DIR2/$tdir/multiop && error "expected error, got success"
-       kill -USR1 $MULTIOP_PID || return 2
-       wait $MULTIOP_PID || return 3
-       cmp $(which multiop) $DIR1/$tdir/multiop || error "binary changed"
-       rm $TMP/$tfile $DIR1/$tdir/multiop || error "removing multiop"
+       cp -p $(which sleep) $DIR1/$tdir/sleep || error "cp failed"
+       $DIR1/$tdir/sleep 60 &
+       SLEEP_PID=$!
+       cp /etc/hosts $DIR2/$tdir/sleep && error "expected error, got success"
+       kill $SLEEP_PID
+       cmp $(which sleep) $DIR1/$tdir/sleep || error "binary changed"
 }
 run_test 14c "open(O_TRUNC) of executing file return -ETXTBSY =="
 
 test_14d() { # bug 10921
        test_mkdir $DIR1/$tdir
-       cp -p $(which multiop) $DIR1/$tdir/multiop || error "cp failed"
-       MULTIOP_PROG=$DIR1/$tdir/multiop multiop_bg_pause $TMP/$tfile O_c ||
-               return 1
-       MULTIOP_PID=$!
+       cp -p $(which sleep) $DIR1/$tdir/sleep || error "cp failed"
+       $DIR1/$tdir/sleep 60 &
+       SLEEP_PID=$!
        log chmod
-       chmod 600 $DIR1/$tdir/multiop || error "chmod failed"
-       kill -USR1 $MULTIOP_PID || return 2
-       wait $MULTIOP_PID || return 3
-       cmp $(which multiop) $DIR1/$tdir/multiop || error "binary changed"
-       rm $TMP/$tfile $DIR1/$tdir/multiop || error "removing multiop"
+       chmod 600 $DIR1/$tdir/sleep || error "chmod failed"
+       kill $SLEEP_PID
+       cmp $(which sleep) $DIR1/$tdir/sleep || error "binary changed"
 }
 run_test 14d "chmod of executing file is still possible ========"