Whamcloud - gitweb
LU-17504 build: fix gcc-13 [-Werror=stringop-overread] error
[fs/lustre-release.git] / lustre / tests / lustre-rsync-test.sh
index b32bc71..9e5720d 100644 (file)
@@ -1,38 +1,30 @@
 #!/bin/bash
-# -*- mode: Bash; tab-width: 4; indent-tabs-mode: t; -*-
-# vim:shiftwidth=4:softtabstop=4:tabstop=4:
 #
 # Run select tests by setting ONLY, or as arguments to the script.
 # Skip specific tests by setting EXCEPT.
 #
-# Run test by setting NOSETUP=true when ltest has setup env for us
 set -e
 
-SRCDIR=`dirname $0`
-export PATH=$PWD/$SRCDIR:$SRCDIR:$PWD/$SRCDIR/../utils:$PATH:/sbin
-
 ONLY=${ONLY:-"$*"}
-# bug number for skipped test:
-ALWAYS_EXCEPT="$LRSYNC_EXCEPT"
-# UPDATE THE COMMENT ABOVE WITH BUG NUMBERS WHEN CHANGING ALWAYS_EXCEPT!
-
-[ "$SLOW" = "no" ] && EXCEPT_SLOW=""
-
-[ "$ALWAYS_EXCEPT$EXCEPT" ] &&
-       echo "Skipping tests: `echo $ALWAYS_EXCEPT $EXCEPT`"
 
 KILL=/bin/kill
-
-TMP=${TMP:-/tmp}
 LREPL_LOG=$TMP/lustre_rsync.log
 ORIG_PWD=${PWD}
 
-LUSTRE=${LUSTRE:-$(cd $(dirname $0)/..; echo $PWD)}
+LUSTRE=${LUSTRE:-$(dirname $0)/..}
 . $LUSTRE/tests/test-framework.sh
-init_test_env $@
-. ${CONFIG:=$LUSTRE/tests/cfg/$NAME.sh}
+init_test_env "$@"
 init_logging
 
+ALWAYS_EXCEPT="$LRSYNC_EXCEPT "
+# bug number for skipped test: LU-4256
+ALWAYS_EXCEPT+="               2b"
+# UPDATE THE COMMENT ABOVE WITH BUG NUMBERS WHEN CHANGING ALWAYS_EXCEPT!
+
+build_test_filter
+
+[ -n "$FILESET" ] && skip "Not functional for FILESET set"
+
 check_and_setup_lustre
 
 DIR=${DIR:-$MOUNT}
@@ -46,8 +38,6 @@ else
        error "No generic nobody group"
 fi
 
-build_test_filter
-
 export LRSYNC=${LRSYNC:-"$LUSTRE/utils/lustre_rsync"}
 [ ! -f "$LRSYNC" ] && export LRSYNC=$(which lustre_rsync)
 export LRSYNC="$LRSYNC -v -c no -d 2"
@@ -77,15 +67,17 @@ init_src() {
        rm -rf $TGT2/$tdir $TGT2/d*.lustre_rsync-test 2> /dev/null
        rm -rf ${DIR}/$tdir $DIR/d*.lustre_rsync-test ${DIR}/tgt 2> /dev/null
        rm -f $LREPL_LOG
-       mkdir -p ${DIR}/$tdir || error "Failed to create target: " $DIR/$tdir
+
+       mkdir_on_mdt0 $DIR/$tdir || error "Failed to create target: " $DIR/$tdir
        mkdir -p ${TGT}/$tdir || error "Failed to create target: " $TGT/$tdir
        mkdir -p ${TGT2}/$tdir || error "Failed to create target: " $TGT2/$tdir
 }
 
 cleanup_src_tgt() {
-       rm -rf $TGT/$tdir
-       rm -rf $DIR/$tdir
-       rm -rf $DIR/tgt
+       [ ! -d $TGT2/$tdir ] || rm -rf $TGT2/$tdir # /tmp/target2/...
+       [ ! -d $TGT/$tdir ] || rm -rf $TGT/$tdir # /tmp/target/...
+       rm -rf $DIR/$tdir  # /mnt/lustre/...
+       rm -rf $DIR/tgt    # /mnt/lustre/tgt
 }
 
 # Check whether the filesystem supports xattr or not.
@@ -94,21 +86,22 @@ cleanup_src_tgt() {
 # "small" - large xattr is unsupported but small xattr is supported
 # "no"    - xattr is unsupported
 check_xattr() {
-    local tgt=$1
-    local xattr="no"
+       local tgt=$1
+       local xattr="no"
+
+       touch $tgt
 
-    touch $tgt
+       local val="$(generate_string $(max_xattr_size))"
 
-    local val="$(generate_string $(max_xattr_size))"
-    if large_xattr_enabled &&
-       setfattr -n user.foo -v $val $tgt 2>/dev/null; then
-            xattr="large"
-    else
-        setfattr -n user.foo -v bar $tgt 2>/dev/null && xattr="small"
-    fi
+       if large_xattr_enabled &&
+               setfattr -n user.foo -v $val $tgt 2>/dev/null; then
+               xattr="large"
+       else
+               setfattr -n user.foo -v bar $tgt 2>/dev/null && xattr="small"
+       fi
 
-    rm -f $tgt
-    echo $xattr
+       rm -f $tgt
+       echo $xattr
 }
 
 check_diff() {
@@ -158,38 +151,38 @@ stop_procs() {
 
 # Test 1A - test basic operations
 test_1A() { # was test_1
-    init_src
-    init_changelog
-    local xattr=$(check_xattr $TGT/foo)
-
-    # Directory create
-    mkdir $DIR/$tdir/d1
-    mkdir $DIR/$tdir/d2
-
-    # File create
-    touch $DIR/$tdir/file1
-    cp /etc/hosts  $DIR/$tdir/d1/
-    touch  $DIR/$tdir/d1/"space in filename"
-    touch  $DIR/$tdir/d1/file2
-
-    # File rename
-    mv $DIR/$tdir/d1/file2 $DIR/$tdir/d2/file3
-
-    # File and directory delete
-    touch $DIR/$tdir/d1/file4
-    mkdir $DIR/$tdir/d1/del
-    touch  $DIR/$tdir/d1/del/del1
-    touch  $DIR/$tdir/d1/del/del2
-    rm -rf $DIR/$tdir/d1/del
-    rm $DIR/$tdir/d1/file4
-
-    #hard and soft links
-    cat /etc/hosts > $DIR/$tdir/d1/link1
-    ln  $DIR/$tdir/d1/link1  $DIR/$tdir/d1/link2
-    ln -s $DIR/$tdir/d1/link1  $DIR/$tdir/d1/link3
-
-    # Device files
-    #mknod $DIR/$tdir/dev1 b 8 1
+       init_src
+       init_changelog
+       local xattr=$(check_xattr $TGT/foo)
+
+       # Directory create
+       mkdir $DIR/$tdir/d1
+       mkdir $DIR/$tdir/d2
+
+       # File create
+       touch $DIR/$tdir/file1
+       cp /etc/hosts  $DIR/$tdir/d1/
+       touch $DIR/$tdir/d1/"space in filename"
+       touch $DIR/$tdir/d1/file2
+
+       # File rename
+       mv $DIR/$tdir/d1/file2 $DIR/$tdir/d2/file3
+
+       # File and directory delete
+       touch $DIR/$tdir/d1/file4
+       mkdir $DIR/$tdir/d1/del
+       touch $DIR/$tdir/d1/del/del1
+       touch $DIR/$tdir/d1/del/del2
+       rm -rf $DIR/$tdir/d1/del
+       rm $DIR/$tdir/d1/file4
+
+       # Hard and soft links
+       cat /etc/hosts > $DIR/$tdir/d1/link1
+       ln $DIR/$tdir/d1/link1  $DIR/$tdir/d1/link2
+       ln -s $DIR/$tdir/d1/link1  $DIR/$tdir/d1/link3
+
+       # Device files
+       #mknod $DIR/$tdir/dev1 b 8 1
 
        # Replicate
        local LRSYNC_LOG=$(generate_logname "lrsync_log")
@@ -197,18 +190,19 @@ test_1A() { # was test_1
        $LRSYNC -s $DIR -t $TGT -t $TGT2 -m $MDT0 -u $CL_USER -l $LREPL_LOG \
                -D $LRSYNC_LOG
 
-    # Set attributes
-    chmod 000 $DIR/$tdir/d2/file3
-    chown nobody:$GROUP $DIR/$tdir/d2/file3
+       # Set attributes
+       chmod 000 $DIR/$tdir/d2/file3
+       chown nobody:$GROUP $DIR/$tdir/d2/file3
 
-    # Set xattrs
-    if [[ "$xattr" != "no" ]]; then
-        local value
-        touch $DIR/$tdir/file5
-        [[ "$xattr" = "large" ]] &&
-            value="$(generate_string $(max_xattr_size))" || value="bar"
-        setfattr -n user.foo -v $value $DIR/$tdir/file5
-    fi
+       # Set xattrs
+       if [[ "$xattr" != "no" ]]; then
+               local value
+               touch $DIR/$tdir/file5
+               [[ "$xattr" = "large" ]] &&
+                       value="$(generate_string $(max_xattr_size))" || value="bar"
+               setfattr -n user.foo -v $value $DIR/$tdir/file5 ||
+                       error "setfattr failed"
+       fi
 
        echo "Replication #2"
        $LRSYNC -l $LREPL_LOG -D $LRSYNC_LOG
@@ -239,7 +233,7 @@ test_1a() { # LU-5005
        init_changelog
 
        # Directory create
-       mkdir $DIR/root-dir
+       mkdir_on_mdt0 $DIR/root-dir
 
        # File create
        touch $DIR/root-file
@@ -250,7 +244,7 @@ test_1a() { # LU-5005
 
        # File and directory delete
        touch $DIR/root-file4
-       mkdir $DIR/root-dir1
+       mkdir_on_mdt0 $DIR/root-dir1
        rm $DIR/root-file4
        rm -rf $DIR/root-dir1
 
@@ -282,7 +276,8 @@ test_2a() {
        init_changelog
 
        # Run dbench
-       sh rundbench -C -D $DIR/$tdir 2 -t $DBENCH_TIME || error "dbench failed"
+       bash rundbench -C -D $DIR/$tdir 2 -t $DBENCH_TIME ||
+               error "dbench failed"
 
        local LRSYNC_LOG=$(generate_logname "lrsync_log")
        # Replicate the changes to $TGT
@@ -306,7 +301,7 @@ test_2b() {
        init_changelog
 
        # Run dbench
-       sh rundbench -C -D $DIR/$tdir 2 -t $DBENCH_TIME &
+       bash rundbench -C -D $DIR/$tdir 2 -t $DBENCH_TIME &
        # wait for dbench to start
        wait_for_function 'child_pid=$(pgrep dbench)' 360
        # let dbench run for a bit
@@ -322,20 +317,20 @@ test_2b() {
                -D $LRSYNC_LOG
        check_diff $DIR/$tdir $TGT/$tdir
 
-    echo Resuming dbench
-    $KILL -SIGCONT $child_pid
-    sleep 10
+       echo Resuming dbench
+       $KILL -SIGCONT $child_pid
+       sleep 10
 
-    echo Stopping dbench
+       echo Stopping dbench
        stop_procs $child_pid
 
        echo Starting replication
        $LRSYNC -l $LREPL_LOG -D $LRSYNC_LOG
        check_diff $DIR/$tdir $TGT/$tdir
 
-    echo "Wait for dbench to finish"
-    $KILL -SIGCONT $child_pid
-    wait
+       echo "Wait for dbench to finish"
+       $KILL -SIGCONT $child_pid
+       wait
 
        # Replicate the changes to $TGT
        echo Starting replication
@@ -344,9 +339,9 @@ test_2b() {
        check_diff $DIR/$tdir $TGT/$tdir
        check_diff $DIR/$tdir $TGT2/$tdir
 
-    fini_changelog
-    cleanup_src_tgt
-    return 0
+       fini_changelog
+       cleanup_src_tgt
+       return 0
 }
 run_test 2b "Replicate files changed by dbench."
 
@@ -356,7 +351,7 @@ test_2c() {
        init_changelog
 
        # Run dbench
-       sh rundbench -C -D $DIR/$tdir 2 -t $DBENCH_TIME &
+       bash rundbench -C -D $DIR/$tdir 2 -t $DBENCH_TIME &
 
        local LRSYNC_LOG=$(generate_logname "lrsync_log")
        # Replicate the changes to $TGT
@@ -453,19 +448,16 @@ run_test 3c "Replicate files created by createmany/unlinkmany"
 
 # Test 4 - Replicate files created by iozone
 test_4() {
-    which iozone > /dev/null 2>&1
-    if [ $? -ne 0 ]; then
-       skip "iozone not found. Skipping test"
-       return
-    fi
-
-    init_src
-    init_changelog
-
-    END_RUN_FILE=${DIR}/$tdir/run LOAD_PID_FILE=${DIR}/$tdir/pid \
-        MOUNT=${DIR}/$tdir run_iozone.sh &
-    sleep 30
-    child_pid=$(pgrep iozone)
+       which iozone > /dev/null 2>&1
+       [ $? -ne 0 ] && skip "iozone not found"
+
+       init_src
+       init_changelog
+
+       END_RUN_FILE=${DIR}/$tdir/run LOAD_PID_FILE=${DIR}/$tdir/pid \
+               MOUNT=${DIR}/$tdir run_iozone.sh &
+       sleep 30
+       child_pid=$(pgrep iozone)
        stop_procs $child_pid
 
        local LRSYNC_LOG=$(generate_logname "lrsync_log")
@@ -475,30 +467,30 @@ test_4() {
        check_diff $DIR/$tdir $TGT/$tdir
        check_diff $DIR/$tdir $TGT2/$tdir
 
-    $KILL -SIGCONT $child_pid
-    sleep 60
-    $KILL -SIGKILL $(pgrep run_iozone.sh)
-    $KILL -SIGKILL $(pgrep iozone)
-
-    # After killing 'run_iozone.sh', process 'iozone' becomes the
-    # child of PID 1. Hence 'wait' does not wait for it. Killing
-    # iozone first, means more iozone processes are spawned off which
-    # is not desirable. So, after sending a sigkill, the test goes
-    # into a wait loop for iozone to cleanup and exit.
-    wait
-    while [ "$(pgrep "iozone")" != "" ];
-    do
-      ps -ef | grep iozone | grep -v grep
-      sleep 1;
-    done
+       $KILL -SIGCONT $child_pid
+       sleep 60
+       $KILL -SIGKILL $(pgrep run_iozone.sh)
+       $KILL -SIGKILL $(pgrep iozone)
+
+       # After killing 'run_iozone.sh', process 'iozone' becomes the
+       # child of PID 1. Hence 'wait' does not wait for it. Killing
+       # iozone first, means more iozone processes are spawned off which
+       # is not desirable. So, after sending a sigkill, the test goes
+       # into a wait loop for iozone to cleanup and exit.
+       wait
+       while [ "$(pgrep "iozone")" != "" ];
+       do
+               ps -ef | grep iozone | grep -v grep
+               sleep 1;
+       done
 
        $LRSYNC -l $LREPL_LOG -D $LRSYNC_LOG
        check_diff $DIR/$tdir $TGT/$tdir
        check_diff $DIR/$tdir $TGT2/$tdir
 
-    fini_changelog
-    cleanup_src_tgt
-    return 0
+       fini_changelog
+       cleanup_src_tgt
+       return 0
 }
 run_test 4 "Replicate files created by iozone"
 
@@ -631,22 +623,22 @@ run_test 7 "lustre_rsync stripesize"
 
 # Test 8 - Replicate multiple file/directory moves
 test_8() {
-    init_src
-    init_changelog
-
-    for i in 1 2 3 4 5 6 7 8 9; do
-       mkdir $DIR/$tdir/d$i
-           for j in 1 2 3 4 5 6 7 8 9; do
-               mkdir $DIR/$tdir/d$i/d$i$j
-               createmany -o $DIR/$tdir/d$i/d$i$j/a 10 \
-                   > /dev/null
-               mv $DIR/$tdir/d$i/d$i$j $DIR/$tdir/d$i/d0$i$j
-               createmany -o $DIR/$tdir/d$i/d0$i$j/b 10 \
-                   > /dev/null
-               mv $DIR/$tdir/d$i/d0$i$j/a0 $DIR/$tdir/d$i/d0$i$j/c0
-           done
-           mv $DIR/$tdir/d$i $DIR/$tdir/d0$i
-    done
+       init_src
+       init_changelog
+
+       for i in 1 2 3 4 5 6 7 8 9; do
+               mkdir $DIR/$tdir/d$i
+               for j in 1 2 3 4 5 6 7 8 9; do
+                       mkdir $DIR/$tdir/d$i/d$i$j
+                       createmany -o $DIR/$tdir/d$i/d$i$j/a 10 \
+                           > /dev/null
+                       mv $DIR/$tdir/d$i/d$i$j $DIR/$tdir/d$i/d0$i$j
+                       createmany -o $DIR/$tdir/d$i/d0$i$j/b 10 \
+                           > /dev/null
+                       mv $DIR/$tdir/d$i/d0$i$j/a0 $DIR/$tdir/d$i/d0$i$j/c0
+               done
+               mv $DIR/$tdir/d$i $DIR/$tdir/d0$i
+       done
 
        local LRSYNC_LOG=$(generate_logname "lrsync_log")
        $LRSYNC -s $DIR -t $TGT -m $MDT0 -u $CL_USER -l $LREPL_LOG \
@@ -654,18 +646,18 @@ test_8() {
 
        check_diff ${DIR}/$tdir $TGT/$tdir
 
-    fini_changelog
-    cleanup_src_tgt
-    return 0
+       fini_changelog
+       cleanup_src_tgt
+       return 0
 }
 run_test 8 "Replicate multiple file/directory moves"
 
 test_9() {
-    init_src
-    init_changelog
+       init_src
+       init_changelog
 
-    mkdir $DIR/$tdir/foo
-    touch $DIR/$tdir/foo/a1
+       mkdir $DIR/$tdir/foo
+       touch $DIR/$tdir/foo/a1
 
        local LRSYNC_LOG=$(generate_logname "lrsync_log")
        $LRSYNC -s $DIR -t $TGT -m $MDT0 -u $CL_USER -l $LREPL_LOG \
@@ -680,13 +672,13 @@ test_9() {
 
        check_diff ${DIR}/$tdir $TGT/$tdir
 
-    fini_changelog
-    cleanup_src_tgt
-    return 0
+       fini_changelog
+       cleanup_src_tgt
+       return 0
 }
 run_test 9 "Replicate recursive directory removal"
 
 cd $ORIG_PWD
-complete $SECONDS
+complete_test $SECONDS
 check_and_cleanup_lustre
 exit_status