Whamcloud - gitweb
LU-13019 tests: replace usleep in test scripts
[fs/lustre-release.git] / lustre / tests / sanity-hsm.sh
index bc7c508..9f31459 100755 (executable)
@@ -7,37 +7,53 @@
 set -e
 set +o monitor
 
-SRCDIR=$(dirname $0)
-export PATH=$PWD/$SRCDIR:$SRCDIR:$PWD/$SRCDIR/utils:$PATH:/sbin:/usr/sbin
-
 ONLY=${ONLY:-"$*"}
-# bug number for skipped test:
-ALWAYS_EXCEPT="$SANITY_HSM_EXCEPT"
-# UPDATE THE COMMENT ABOVE WITH BUG NUMBERS WHEN CHANGING ALWAYS_EXCEPT!
-if $SHARED_KEY; then
-# bug number for skipped tests:        LU-9795 LU-9795
-       ALWAYS_EXCEPT="         13      402b    $ALWAYS_EXCEPT"
-fi
-
-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}
-get_lustre_env
 init_logging
 
+ALWAYS_EXCEPT="$SANITY_HSM_EXCEPT "
+if $SHARED_KEY; then
+# bug number for skipped tests: LU-9795 LU-9795
+       ALWAYS_EXCEPT+="        13      402b "
+# UPDATE THE COMMENT ABOVE WITH BUG NUMBERS WHEN CHANGING ALWAYS_EXCEPT!
+fi
+
+# Skip tests for PPC that fail frequently
+if [[ $(uname -m) = ppc64 ]]; then
+       # bug number:    LU-12251 LU-12251 LU-12251 LU-12251 LU-12251 LU-12251
+       ALWAYS_EXCEPT+=" 1a       1b       1d       1e       12c      12f "
+       # bug number:    LU-12251 LU-12251 LU-12251 LU-12251 LU-12251 LU-12251
+       ALWAYS_EXCEPT+=" 12g      12h      12m      12n      12o      12p "
+       # bug number:    LU-12251 LU-12251 LU-12251 LU-12251 LU-12251 LU-12251
+       ALWAYS_EXCEPT+=" 12q      21       22       23       24a      24b "
+       # bug number:    LU-12251 LU-12251 LU-12251 LU-12251 LU-12251 LU-12251
+       ALWAYS_EXCEPT+=" 24d      24e      24f      25b      30c      37 "
+       # bug number:    LU-12251 LU-12251 LU-12251 LU-12251 LU-12251 LU-12251
+       ALWAYS_EXCEPT+=" 57       58       90       110b     111b     113 "
+       # bug number:    LU-12251 LU-12251 LU-12251 LU-12251 LU-12251 LU-12251
+       ALWAYS_EXCEPT+=" 222b     222d     228      260a     260b     260c "
+       # bug number:    LU-12252 LU-12252 LU-12252 LU-12252 LU-12252 LU-12252
+       ALWAYS_EXCEPT+=" 220A     220a     221      222a     222c     223a "
+       # bug number:    LU-12252 LU-12252 LU-12252 LU-12252 LU-12252 LU-12252
+       ALWAYS_EXCEPT+=" 223b     224A     224a     226      227      600"
+       # bug number:    LU-12252 LU-12252 LU-12252 LU-12252 LU-12252 LU-12252
+       ALWAYS_EXCEPT+=" 601      602      603      604      605 "
+fi
+
+build_test_filter
+
 [ -n "$FILESET" ] && skip "Not functional for FILESET set"
 
-MULTIOP=${MULTIOP:-multiop}
 OPENFILE=${OPENFILE:-openfile}
-MMAP_CAT=${MMAP_CAT:-mmap_cat}
 MOUNT_2=${MOUNT_2:-"yes"}
 FAIL_ON_ERROR=false
 
 # script only handles up to 10 MDTs (because of MDT_PREFIX)
 [ $MDSCOUNT -gt 9 ] &&
-       error "script cannot handle more than 9 MDTs, please fix" && exit
+       error "script cannot handle more than 9 MDTs, please fix"
 
 check_and_setup_lustre
 
@@ -47,7 +63,7 @@ fi
 
 # $RUNAS_ID may get set incorrectly somewhere else
 if [[ $UID -eq 0 && $RUNAS_ID -eq 0 ]]; then
-       skip_env "\$RUNAS_ID set to 0, but \$UID is also 0!" && exit
+       skip_env "\$RUNAS_ID set to 0, but \$UID is also 0!"
 fi
 check_runas_id $RUNAS_ID $RUNAS_GID $RUNAS
 if getent group nobody; then
@@ -58,8 +74,6 @@ else
        error "No generic nobody group"
 fi
 
-build_test_filter
-
 # if there is no CLIENT1 defined, some tests can be ran on localhost
 CLIENT1=${CLIENT1:-$HOSTNAME}
 # if CLIENT2 doesn't exist then use CLIENT1 instead
@@ -68,106 +82,17 @@ CLIENT1=${CLIENT1:-$HOSTNAME}
 # Exception is the test which need two separate nodes
 CLIENT2=${CLIENT2:-$CLIENT1}
 
-#
-# In order to test multiple remote HSM agents, a new facet type named "AGT" and
-# the following associated variables are added:
-#
-# AGTCOUNT: number of agents
-# AGTDEV{N}: target HSM mount point (root path of the backend)
-# agt{N}_HOST: hostname of the agent agt{N}
-# SINGLEAGT: facet of the single agent
-#
-# The number of agents is initialized as the number of remote client nodes.
-# By default, only single copytool is started on a remote client/agent. If there
-# was no remote client, then the copytool will be started on the local client.
-#
-init_agt_vars() {
-       local n
-       local agent
-
-       export AGTCOUNT=${AGTCOUNT:-$((CLIENTCOUNT - 1))}
-       [[ $AGTCOUNT -gt 0 ]] || AGTCOUNT=1
-
-       export SHARED_DIRECTORY=${SHARED_DIRECTORY:-$TMP}
-       if [[ $CLIENTCOUNT -gt 1 ]] &&
-               ! check_shared_dir $SHARED_DIRECTORY $CLIENTS; then
-               skip_env "SHARED_DIRECTORY should be accessible"\
-                        "on all client nodes"
-               exit 0
-       fi
-
-       # We used to put the HSM archive in $SHARED_DIRECTORY but that
-       # meant NFS issues could hose sanity-hsm sessions. So now we
-       # use $TMP instead.
-       for n in $(seq $AGTCOUNT); do
-               eval export AGTDEV$n=\$\{AGTDEV$n:-"$TMP/arc$n"\}
-               agent=CLIENT$((n + 1))
-               if [[ -z "${!agent}" ]]; then
-                       [[ $CLIENTCOUNT -eq 1 ]] && agent=CLIENT1 ||
-                               agent=CLIENT2
-               fi
-               eval export agt${n}_HOST=\$\{agt${n}_HOST:-${!agent}\}
-       done
-
-       export SINGLEAGT=${SINGLEAGT:-agt1}
-
-       export HSMTOOL=${HSMTOOL:-"lhsmtool_posix"}
-       export HSMTOOL_VERBOSE=${HSMTOOL_VERBOSE:-""}
-       export HSMTOOL_UPDATE_INTERVAL=${HSMTOOL_UPDATE_INTERVAL:=""}
-       export HSMTOOL_EVENT_FIFO=${HSMTOOL_EVENT_FIFO:=""}
-       export HSMTOOL_TESTDIR
-
-       HSM_ARCHIVE_NUMBER=2
-
-       # The test only support up to 10 MDTs
-       MDT_PREFIX="mdt.$FSNAME-MDT000"
-       HSM_PARAM="${MDT_PREFIX}0.hsm"
-
-       # archive is purged at copytool setup
-       HSM_ARCHIVE_PURGE=true
-
-       # Don't allow copytool error upon start/setup
-       HSMTOOL_NOERROR=false
-}
-
-# Get the backend root path for the given agent facet.
-copytool_device() {
-       local facet=$1
-       local dev=AGTDEV$(facet_number $facet)
-
-       echo -n ${!dev}
-}
-
-get_mdt_devices() {
-       local mdtno
-       # get MDT device for each mdc
-       for mdtno in $(seq 1 $MDSCOUNT); do
-               local idx=$(($mdtno - 1))
-               MDT[$idx]=$($LCTL get_param -n \
-                       mdc.$FSNAME-MDT000${idx}-mdc-*.mds_server_uuid |
-                       awk '{gsub(/_UUID/,""); print $1}' | head -n1)
-       done
-}
-
 search_copytools() {
        local hosts=${1:-$(facet_active_host $SINGLEAGT)}
        do_nodesv $hosts "libtool execute pgrep -x $HSMTOOL"
 }
 
-kill_copytools() {
-       local hosts=${1:-$(facet_active_host $SINGLEAGT)}
-
-       echo "Killing existing copytools on $hosts"
-       do_nodesv $hosts "libtool execute killall -q $HSMTOOL" || true
-       copytool_continue "$hosts"
-}
-
 wait_copytools() {
        local hosts=${1:-$(facet_active_host $SINGLEAGT)}
        local wait_timeout=200
        local wait_start=$SECONDS
        local wait_end=$((wait_start + wait_timeout))
-       local sleep_time=100000 # 0.1 second
+       local sleep_time=1
 
        while ((SECONDS < wait_end)); do
                if ! search_copytools $hosts; then
@@ -176,9 +101,8 @@ wait_copytools() {
                fi
 
                echo "copytools still running on $hosts"
-               usleep $sleep_time
-               [ $sleep_time -lt 32000000 ] && # 3.2 seconds
-                       sleep_time=$(bc <<< "$sleep_time * 2")
+               sleep $sleep_time
+               [ $sleep_time -lt 5 ] && sleep_time=$((sleep_time + 1))
        done
 
        # try to dump Copytool's stack
@@ -205,24 +129,17 @@ copytool_monitor_setup() {
        cmd="cat $test_dir/fifo > $test_dir/events &"
        cmd+=" echo \\\$! > $test_dir/monitor_pid"
 
-       if [[ $PDSH == *Rmrsh* ]]; then
-               # This is required for pdsh -Rmrsh and its handling of remote
-               # shells.
-               # Regular ssh and pdsh -Rssh work fine without this
-               # backgrounded subshell nonsense.
-               (do_node $agent "$cmd") &
-               export HSMTOOL_MONITOR_PDSH=$!
+       # This background subshell nonsense is required when pdsh/ssh decides
+       # to wait for the cat process to exit on the remote client
+       (do_node $agent "$cmd") &
+       export HSMTOOL_MONITOR_PDSH=$!
 
-               # Slightly racy, but just making a best-effort to catch obvious
-               # problems.
-               sleep 1
-               ps -p $HSMTOOL_MONITOR_PDSH > /dev/null ||
-                       error "Failed to start copytool monitor on $agent"
-       else
-               do_node $agent "$cmd"
-               if [ $? != 0 ]; then
-                       error "Failed to start copytool monitor on $agent"
-               fi
+       # Slightly racy, but just making a best-effort to catch obvious
+       # problems.
+       sleep 1
+       do_node $agent "stat $HSMTOOL_MONITOR_DIR/monitor_pid 2>&1 > /dev/null"
+       if [ $? != 0 ]; then
+               error "Failed to start copytool monitor on $agent"
        fi
 }
 
@@ -257,13 +174,6 @@ copytool_suspend() {
        echo "Copytool is suspended on $agents"
 }
 
-copytool_continue() {
-       local agents=${1:-$(facet_active_host $SINGLEAGT)}
-
-       do_nodesv $agents "libtool execute pkill -CONT -x $HSMTOOL" || return 0
-       echo "Copytool is continued on $agents"
-}
-
 copytool_remove_backend() {
        local fid=$1
        local be=$(do_facet $SINGLEAGT find "$(hsm_root)" -name $fid)
@@ -499,7 +409,7 @@ wait_all_done() {
        [[ -n $fid ]] && cmd+=" | grep '$fid'"
        cmd+=" | egrep 'WAITING|STARTED'"
 
-       wait_result $SINGLEMDS "$cmd" "" $timeout ||
+       wait_update_facet --verbose mds1 "$cmd" "" $timeout ||
                error "requests did not complete"
 }
 
@@ -1051,7 +961,7 @@ test_11a() {
        echo "Verifying imported size $LSZ=$ASZ"
        [[ $LSZ -eq $ASZ ]] || error "Incorrect size $LSZ != $ASZ"
        echo -n "Verifying released pattern: "
-       local PTRN=$($GETSTRIPE -L $f)
+       local PTRN=$($LFS getstripe -L $f)
        echo $PTRN
        [[ $PTRN == released ]] || error "Is not released"
        local fid=$(path2fid $f)