X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Ftests%2Fsanity-hsm.sh;h=f535b7eaf84752c432bbbcd59f2ab050799d345e;hb=8ddf4e2aa863e3100a3dff916821f2739e9427cd;hp=919d104ad17bad779fddd3d437a360a928acecb5;hpb=2f253abab679c21b41197379b23e36943e5995a7;p=fs%2Flustre-release.git diff --git a/lustre/tests/sanity-hsm.sh b/lustre/tests/sanity-hsm.sh old mode 100644 new mode 100755 index 919d104..f535b7e --- a/lustre/tests/sanity-hsm.sh +++ b/lustre/tests/sanity-hsm.sh @@ -11,8 +11,8 @@ SRCDIR=$(dirname $0) export PATH=$PWD/$SRCDIR:$SRCDIR:$PWD/$SRCDIR/utils:$PATH:/sbin:/usr/sbin ONLY=${ONLY:-"$*"} -# bug number for skipped test: 3815 3939 -ALWAYS_EXCEPT="$SANITY_HSM_EXCEPT 34 35 36 40" +# bug number for skipped test: 3815 +ALWAYS_EXCEPT="$SANITY_HSM_EXCEPT 34 35 36" # bug number for skipped test:4178 4176 ALWAYS_EXCEPT="$ALWAYS_EXCEPT 200 221 223b 31a" # UPDATE THE COMMENT ABOVE WITH BUG NUMBERS WHEN CHANGING ALWAYS_EXCEPT! @@ -90,6 +90,7 @@ init_agt_vars() { export HSMTOOL=${HSMTOOL:-"lhsmtool_posix"} export HSMTOOL_VERBOSE=${HSMTOOL_VERBOSE:-""} + export HSMTOOL_UPDATE_INTERVAL=${HSMTOOL_UPDATE_INTERVAL:=""} export HSMTOOL_BASE=$(basename "$HSMTOOL" | cut -f1 -d" ") HSM_ARCHIVE=$(copytool_device $SINGLEAGT) HSM_ARCHIVE_NUMBER=2 @@ -144,7 +145,7 @@ copytool_setup() { local facet=${1:-$SINGLEAGT} local lustre_mntpnt=${2:-$MOUNT} local arc_id=$3 - local hsm_root=$(copytool_device $facet) + local hsm_root=${4:-$(copytool_device $facet)} local agent=$(facet_active_host $facet) if [[ -z "$arc_id" ]] && @@ -164,6 +165,8 @@ copytool_setup() { # independent of hardware local cmd="$HSMTOOL $HSMTOOL_VERBOSE --daemon --hsm-root $hsm_root" [[ -z "$arc_id" ]] || cmd+=" --archive $arc_id" + [[ -z "$HSMTOOL_UPDATE_INTERVAL" ]] || + cmd+=" --update-interval $HSMTOOL_UPDATE_INTERVAL" cmd+=" --bandwidth 1 $lustre_mntpnt" # Redirect the standard output and error to a log file which @@ -562,6 +565,21 @@ wait_request_state() { error "request on $fid is not $state on $mds" } +wait_request_progress() { + local fid=$1 + local request=$2 + local progress=$3 + # 4th arg (mdt index) is optional + local mdtidx=${4:-0} + local mds=mds$((mdtidx + 1)) + + local cmd="$LCTL get_param -n ${MDT_PREFIX}${mdtidx}.hsm.active_requests" + cmd+=" | awk '/'$fid'.*action='$request'/ {print \\\$12}' | cut -f2 -d=" + + wait_result $mds "$cmd" $progress 100 || + error "request on $fid has not made progress $progress on $mds" +} + get_request_state() { local fid=$1 local request=$2 @@ -1155,6 +1173,53 @@ test_12n() { } run_test 12n "Import/implicit restore/release" +test_12o() { + # test needs a running copytool + copytool_setup + + mkdir -p $DIR/$tdir + local f=$DIR/$tdir/$tfile + local fid=$(copy_file /etc/hosts $f) + + $LFS hsm_archive --archive $HSM_ARCHIVE_NUMBER $f + wait_request_state $fid ARCHIVE SUCCEED + $LFS hsm_release $f || error "release of $f failed" + +#define OBD_FAIL_MDS_HSM_SWAP_LAYOUTS 0x152 + do_facet $SINGLEMDS lctl set_param fail_loc=0x152 + + # set no retry action mode + cdt_set_no_retry + + diff -q /etc/hosts $f + local st=$? + + # we check we had a restore failure + wait_request_state $fid RESTORE FAILED + + [[ $st -eq 0 ]] && error "Restore must fail" + + # remove no retry action mode + cdt_clear_no_retry + + # check file is still released + check_hsm_flags $f "0x0000000d" + + # retry w/o failure injection + do_facet $SINGLEMDS lctl set_param fail_loc=0 + + diff -q /etc/hosts $f + st=$? + + # we check we had a restore done + wait_request_state $fid RESTORE SUCCEED + + [[ $st -eq 0 ]] || error "Restored file differs" + + copytool_cleanup +} +run_test 12o "Layout-swap failure during Restore leaves file released" + test_13() { # test needs a running copytool copytool_setup @@ -2234,7 +2299,13 @@ test_40() { fid=$(copy_file /etc/hosts $f.$p.$i) done done - copytool_setup + # force copytool to use a local/temp archive dir to ensure best + # performance vs remote/NFS mounts used in auto-tests + if df --local $HSM_ARCHIVE >/dev/null 2>&1 ; then + copytool_setup + else + copytool_setup $SINGLEAGT $MOUNT $HSM_ARCHIVE_NUMBER $TMP/$tdir + fi # to be sure wait_all_done will not be mislead by previous tests cdt_purge wait_for_grace_delay @@ -2478,6 +2549,36 @@ test_58() { } run_test 58 "Truncate a released file will trigger restore" +test_60() { + local interval=5 + local progress_timeout=$((interval * 2)) + + # test needs a new running copytool + copytool_cleanup + HSMTOOL_UPDATE_INTERVAL=$interval copytool_setup + + mkdir -p $DIR/$tdir + local f=$DIR/$tdir/$tfile + local fid=$(make_large_for_progress $f) + + local start_at=$(date +%s) + $LFS hsm_archive --archive $HSM_ARCHIVE_NUMBER $f || + error "could not archive file" + wait_request_progress $fid ARCHIVE 5242880 + local finish_at=$(date +%s) + local elapsed=$((finish_at - start_at)) + + if [ $elapsed -gt $progress_timeout ]; then + error "Expected progress update within $progress_timeout seconds" + elif [ $elapsed -lt $interval ]; then + error "Expected progress update after at least $interval seconds" + fi + + cdt_clear_no_retry + copytool_cleanup +} +run_test 60 "Changing progress update interval from default" + test_90() { file_count=57 mkdir -p $DIR/$tdir