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!
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
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" ]] &&
# 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
path2fid $1 || error "cannot get fid on $1"
}
+make_small_sync() {
+ dd if=/dev/urandom of=$1 count=1 bs=1M conv=sync ||
+ error "cannot create $1"
+ path2fid $1 || error "cannot get fid on $1"
+}
+
cleanup_large_files() {
local ratio=$(df -P $MOUNT | tail -1 | awk '{print $5}' |
sed 's/%//g')
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
}
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
local fid=$(make_small $f)
check_hsm_flags $f "0x00000000"
+ # LU-4388/LU-4389 - ZFS does not report full number of blocks
+ # used until file is flushed to disk
+ if [ $(facet_fstype ost1) == "zfs" ]; then
+ # this causes an OST_SYNC rpc to be sent
+ dd if=/dev/zero of=$f bs=512 count=1 oflag=sync conv=notrunc,fsync
+ # clear locks to reread file data
+ cancel_lru_locks osc
+ fi
+
local orig_size=$(stat -c "%s" $f)
local orig_blocks=$(stat -c "%b" $f)
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
}
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
# test needs a running copytool
copytool_setup
- dd if=/dev/urandom of=$DIR/$tfile bs=1M count=1 conv=sync ||
- error "creating $DIR/$tfile"
+ local fid=$(make_small_sync $DIR/$tfile)
$LFS hsm_archive --archive $HSM_ARCHIVE_NUMBER $DIR/$tfile
- wait_request_state $(path2fid $DIR/$tfile) ARCHIVE SUCCEED
+ wait_request_state $fid ARCHIVE SUCCEED
$LFS hsm_release $DIR/$tfile
check_hsm_flags $DIR/$tfile "0x0000000d"
$LFS hsm_release $DIR/$tfile
check_hsm_flags $DIR/$tfile "0x0000000d"
- mkdir $DIR/$tdir
+ mkdir -p $DIR/$tdir || error "mkdir $tdir failed"
tar cf - --sparse $DIR/$tfile | tar xvf - -C $DIR/$tdir ||
error "tar failed"
cmp $DIR/$tfile $DIR/$tdir/$DIR/$tfile ||
error "comparing untarred $DIR/$tfile"
+ rm -f $DIR/$tfile $DIR/$tfile.2 ||
+ error "rm $DIR/$tfile or $DIR/$tfile.2 failed"
copytool_cleanup
}
run_test 228 "On released file, return extend to FIEMAP. For [cp,tar] --sparse"