LUSTRE=${LUSTRE:-$(dirname $0)/..}
. $LUSTRE/tests/test-framework.sh
-init_test_env $@
+init_test_env "$@"
init_logging
ALWAYS_EXCEPT="$SANITY_HSM_EXCEPT "
{
local fid="$1"
- case "$HSMTOOL" in
- *lhsmtool_posix)
- printf "%s" "$(hsm_root)/*/*/*/*/*/*/$fid"
- ;;
+ case "$HSMTOOL_ARCHIVE_FORMAT" in
+ v1)
+ printf "%s" "$(hsm_root)/*/*/*/*/*/*/$fid"
+ ;;
+ v2)
+ printf "%s" "$(hsm_root)/*/$fid"
+ ;;
esac
}
run_test 1A "lfs hsm flags root/non-root access"
test_1a() {
+ mkdir_on_mdt0 $DIR/$tdir
+
local f=$DIR/$tdir/$tfile
local fid=$(create_small_file $f)
}
test_1b() {
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
$LFS setstripe -E 1M -S 1M -E 64M -c 2 -E -1 -c 4 $DIR/$tdir ||
error "failed to set default stripe"
local f=$DIR/$tdir/$tfile
error "wrong archive number, $st != $LOCAL_HSM_ARCHIVE_NUMBER"
LOCAL_HSM_ARCHIVE_NUMBER=33
- if [ $(lustre_version_code client) -ge $(version_code 2.11.56) ] &&
- [ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.11.56) ]; then
+ if [ "$CLIENT_VERSION" -ge $(version_code 2.11.56) ] &&
+ [ "$MDS1_VERSION" -ge $(version_code 2.11.56) ]; then
# lustre in the new version supports unlimited archiveID.
# Test whether setting archive number > 32 is supported
$LFS hsm_set --exists --archive-id $LOCAL_HSM_ARCHIVE_NUMBER $f ||
[ $MDS1_VERSION -lt $(version_code 2.10.59) ] &&
skip "need MDS version at least 2.10.59"
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
$LFS setstripe -E 1M -L mdt -E -1 -c 2 $DIR/$tdir ||
error "failed to set default stripe"
local f=$DIR/$tdir/$tfile
run_test 1d "Archive, Release and Restore DoM file"
test_1e() {
- [ $(lustre_version_code $SINGLEMDS) -lt $(version_code $SEL_VER) ] &&
+ [ "$MDS1_VERSION" -lt $(version_code $SEL_VER) ] &&
skip "skipped for lustre < $SEL_VER"
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
$LFS setstripe -E 1G -z 64M -E 10G -z 512M -E -1 -z 1G $DIR/$tdir ||
error "failed to set default stripe"
local comp_file=$DIR/$tdir/$tfile
test_2() {
local f=$DIR/$tdir/$tfile
+ mkdir_on_mdt0 $DIR/$tdir
create_empty_file "$f"
# New files are not dirty
check_hsm_flags $f "0x00000000"
run_test 2 "Check file dirtyness when doing setattr"
test_3() {
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
f=$DIR/$tdir/$tfile
# New files are not dirty
# test needs a running copytool
copytool setup
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
local fid=$(copy_file /etc/passwd $f)
$LFS hsm_archive $f
local uuid=$(get_agent_uuid $(facet_active_host $SINGLEAGT))
check_agent_registered $uuid
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
+
local f=$DIR/$tdir/$tfile
local fid=$(copy_file /etc/passwd $f)
$LFS hsm_archive --archive $archive_id $f
copytool setup --facet agt$n
done
+ mkdir_on_mdt0 $DIR/$tdir
+
# archive files
for n in $(seq $AGTCOUNT); do
file=$DIR/$tdir/$tfile.$n
# test needs a running copytool
copytool setup
+ mkdir_on_mdt0 $DIR/$tdir
mkdir -p $DIR/$tdir/d1
local f=$DIR/$tdir/$tfile
local fid=$(copy_file /etc/hosts $f)
# test needs a running copytool
copytool setup
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
local fid=$(copy_file /etc/hosts $f)
$LFS hsm_archive $f || error "archive request failed"
# test needs a running copytool
copytool setup
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
local fid=$(copy_file /etc/hosts $f)
$LFS hsm_archive $f || error "cannot archive $f"
run_test 10d "Archive a file on the default archive id"
test_11a() {
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
copy2archive /etc/hosts $tdir/$tfile
local f=$DIR/$tdir/$tfile
# test needs a running copytool
copytool setup
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
local fid=$(copy_file /etc/hosts $f)
$LFS hsm_archive -a $HSM_ARCHIVE_NUMBER $f ||
}
run_test 11b "Import a deleted file using its FID"
+test_11c() {
+ pool_add $TESTNAME || error "Pool creation failed"
+ pool_add_targets $TESTNAME 1 1 || error "pool_add_targets failed"
+
+ mkdir -p $DIR/$tdir
+ $LFS setstripe -p "$TESTNAME" $DIR/$tdir
+
+ copy2archive /etc/hosts $tdir/$tfile
+ copytool import $tdir/$tfile $DIR/$tdir/$tfile
+}
+run_test 11c "Import a file to a directory with a pool"
+
test_12a() {
# test needs a running copytool
copytool setup
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
copy2archive /etc/hosts $tdir/$tfile
local f=$DIR/$tdir/$tfile
# test needs a running copytool
copytool setup
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
copy2archive /etc/hosts $tdir/$tfile
local f=$DIR/$tdir/$tfile
copytool setup
local f=$DIR/$tdir/$tfile
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
$LFS setstripe -c 2 "$f"
local fid=$(create_file "$f" 1M 5)
# test needs a running copytool
copytool setup
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
local fid=$(copy_file /etc/hosts $f)
# test needs a running copytool
copytool setup
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
local fid=$(copy_file /etc/hosts $f)
$LFS hsm_archive $f || error "archive request failed"
# test needs a running copytool
copytool setup
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
local fid=$(copy_file /etc/hosts $f)
# test needs a running copytool
copytool setup
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
local fid=$(copy_file /etc/hosts $f)
# test needs a running copytool
copytool setup
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
local fid=$(copy_file /etc/hosts $f)
# test needs a running copytool
copytool setup
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
local fid=$(copy_file /etc/passwd $f)
$LFS hsm_archive $f || error "archive of $f failed"
# test needs a running copytool
copytool setup
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
local fid=$(copy_file /etc/hosts $f)
# test needs a running copytool
copytool setup
- mkdir $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
local fid=$(copy_file /etc/hosts $f)
# test needs a running copytool
copytool setup -m "$MOUNT3"
+ mkdir_on_mdt0 $DIR/$tdir
+
local f=$DIR/$tdir/$tfile
local f2=$DIR2/$tdir/$tfile
local fid=$(create_small_file $f)
# test needs a running copytool
copytool setup
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
local fid=$(copy_file /etc/hosts $f)
}
run_test 12r "lseek restores released file"
+test_12s() {
+ local f=$DIR/$tdir/$tfile
+ local fid
+ local pid1 pid2
+
+ (( MDS1_VERSION >= $(version_code 2.15.50) )) ||
+ skip "Need MDS version newer than 2.15.50"
+
+ # test needs a running copytool
+ copytool setup
+
+ mkdir_on_mdt0 $DIR/$tdir
+ fid=$(copy_file /etc/hosts $f)
+
+ $LFS hsm_archive $f || error "archive of $f failed"
+ wait_request_state $fid ARCHIVE SUCCEED
+ $LFS hsm_release $f || error "release of $f failed"
+
+#define OBD_FAIL_ONCE|OBD_FAIL_MDS_HSM_RESTORE_RACE 0x8000018b
+ do_facet mds1 $LCTL set_param fail_loc=0x8000018b
+ cat $f > /dev/null & pid1=$!
+ cat $f > /dev/null & pid2=$!
+
+ wait $pid1 || error "cat process 1 fail (pid: $pid1)"
+ wait $pid2 || error "cat process 2 fail (pid: $pid2)"
+
+ # Race exists if more than 1 restore requests is registered
+ assert_request_count $fid RESTORE 1
+}
+run_test 12s "race between restore requests"
+
test_13() {
local -i i j k=0
for i in {1..10}; do
# test needs a running copytool
copytool setup
+ mkdir_on_mdt0 $DIR/$tdir
+
# archive a file
local f=$DIR/$tdir/$tfile
local fid=$(create_small_file $f)
# test needs a running copytool
copytool setup
+ mkdir_on_mdt0 $DIR/$tdir
+
# archive files
local f=$DIR/$tdir/$tfile
local count=5
local goal=20
dd if=/dev/zero of=$ref bs=1M count=20
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
local fid=$(copy_file $ref $f)
rm $ref
test_21() {
# test needs a running copytool
copytool setup
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/test_release
# 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
+ if [ "$ost1_FSTYPE" == "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
test_22() {
# test needs a running copytool
copytool setup
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/test_release
local swap=$DIR/$tdir/test_swap
test_23() {
# test needs a running copytool
copytool setup
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/test_mtime
# test needs a running copytool
copytool setup
+ mkdir_on_mdt0 $DIR/$tdir
fid=$(create_small_file $file)
# Test needs a running copytool.
copytool setup
+ mkdir_on_mdt0 $DIR/$tdir
# Check that root can do HSM actions on a regular user's file.
fid=$(create_small_file $file)
# test needs a running copytool
copytool setup
-
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
# Save the default masks and check that cleanup_24c will
# restore the request masks correctly.
local fid1
local fid2
+ mkdir_on_mdt0 $DIR/$tdir
+
fid1=$(create_small_file $file1)
echo $fid1
test_24e() {
copytool setup
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
local fid
test_24f() {
# test needs a running copytool
copytool setup
+ mkdir_on_mdt0 $DIR/$tdir
mkdir -p $DIR/$tdir/d1
local f=$DIR/$tdir/$tfile
copytool setup
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
chmod ugo+rwx $DIR/$tdir
echo "Please listen carefully as our options have changed." | tee $file
# test needs a running copytool
copytool setup
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
local fid=$(copy_file /etc/passwd $f)
test_26A() { # was test_26
# test needs a running copytool
copytool setup
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
local fid=$(create_empty_file "$f")
# test needs a running copytool
copytool setup
+ mkdir_on_mdt0 $DIR/$tdir
- mkdir -p $DIR/$tdir
local f=$DIR/$tdir/$tfile
local fid=$(copy_file /etc/passwd $f)
test_26b() {
# test needs a running copytool
copytool setup
+ mkdir_on_mdt0 $DIR/$tdir
- mkdir -p $DIR/$tdir
local f=$DIR/$tdir/$tfile
local fid=$(copy_file /etc/passwd $f)
test_26c() {
# test needs a running copytool
copytool setup
+ mkdir_on_mdt0 $DIR/$tdir
- mkdir -p $DIR/$tdir
local f=$DIR/$tdir/$tfile
local fid=$(copy_file /etc/passwd $f)
test_26d() {
# test needs a running copytool
copytool setup
+ mkdir_on_mdt0 $DIR/$tdir
- mkdir -p $DIR/$tdir
local f=$DIR/$tdir/$tfile
local fid=$(create_small_file $f)
test_27b() {
# test needs a running copytool
copytool setup
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
local fid=$(create_empty_file "$f")
test_28() {
# test needs a running copytool
copytool setup
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
local fid=$(create_empty_file "$f")
test_29b() {
# test needs a running copytool
copytool setup
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
local fid=$(create_small_file $f)
test_29c() {
# test needs a running copytool
copytool setup
+ mkdir_on_mdt0 $DIR/$tdir
local fid1=$(create_small_file $DIR/$tdir/$tfile-1)
local fid2=$(create_small_file $DIR/$tdir/$tfile-2)
copytool setup -f agt$n -a $n
done
+ mkdir_on_mdt0 $DIR/$tdir
+
# archive files
file=$DIR/$tdir/$tfile
fid=$(create_small_file $file)
# test needs a running copytool
copytool setup
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/true
local fid=$(copy_file /bin/true $f)
chmod 755 $f
# test needs a running copytool
copytool setup
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/SLEEP
local slp_sum1=$(md5sum /bin/sleep)
local fid=$(copy_file /bin/sleep $f)
test_31a() {
# test needs a running copytool
copytool setup
+ mkdir_on_mdt0 $DIR/$tdir
create_archive_file $tdir/$tfile
local f=$DIR/$tdir/$tfile
test_31b() {
# test needs a running copytool
copytool setup
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
local fid=$(create_file "$f" 1MB 39)
test_31c() {
# test needs a running copytool
copytool setup
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
local fid=$(create_file "$f" 1M 39)
test_33() {
local f=$DIR/$tdir/$tfile
+
+ mkdir_on_mdt0 $DIR/$tdir
local fid=$(create_empty_file "$f")
copytool setup
test_34() {
# test needs a running copytool
copytool setup -b 1
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
local fid=$(create_empty_file "$f")
test_35() {
# test needs a running copytool
copytool setup -b 1
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
local f1=$DIR/$tdir/$tfile-1
test_36() {
# test needs a running copytool
copytool setup -b 1
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
local fid=$(create_empty_file "$f")
test_37() {
# LU-5683: check that an archived dirty file can be rearchived.
copytool setup
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
local fid
}
run_test 40 "Parallel archive requests"
+hsm_archive_batch() {
+ local files_num=$1
+ local batch_max=$2
+ local filebase=$3
+ local batch_num=0
+ local fileset=""
+ local i=0
+
+ while [ $i -lt $files_num ]; do
+ if [ $batch_num -eq $batch_max ]; then
+ $LFS hsm_archive $fileset || error "HSM archive failed"
+ # Reset the batch container.
+ fileset=""
+ batch_num=0
+ fi
+
+ fileset+="${filebase}$i "
+ batch_num=$(( batch_num + 1 ))
+ i=$(( i + 1 ))
+ done
+
+ if [ $batch_num -ne 0 ]; then
+ $LFS hsm_archive $fileset || error "HSM archive failed"
+ fileset=""
+ batch_num=0
+ fi
+}
+
+test_50() {
+ local dir=$DIR/$tdir
+ local batch_max=50
+
+ set_hsm_param max_requests 1000000
+ mkdir $dir || error "mkdir $dir failed"
+ df -i $MOUNT
+
+ local start
+ local elapsed
+ local files_num
+ local filebase
+
+ files_num=10000
+ filebase="$dir/$tfile.start."
+ createmany -m $filebase $files_num ||
+ error "createmany -m $filebase failed: $?"
+
+ start=$SECONDS
+ hsm_archive_batch $files_num $batch_max "$filebase"
+ elapsed=$((SECONDS - start))
+ do_facet $SINGLEMDS "$LCTL get_param -n \
+ $HSM_PARAM.actions | grep WAITING | wc -l"
+ unlinkmany $filebase $files_num || error "unlinkmany $filabase failed"
+ echo "Start Phase files_num: $files_num time: $elapsed"
+
+ files_num=20000
+ filebase="$dir/$tfile.in."
+ createmany -m $filebase $files_num ||
+ error "createmany -m $filebase failed: $?"
+ start=$SECONDS
+ hsm_archive_batch $files_num $batch_max "$filebase"
+ elapsed=$((SECONDS - start))
+ unlinkmany $filebase $files_num || error "unlinkmany $filabase failed"
+ echo "Middle Phase files_num: $files_num time: $elapsed"
+
+ files_num=10000
+ filebase="$dir/$tfile.end."
+ createmany -m $filebase $files_num ||
+ error "createmany -m $filebase failed: $?"
+
+ start=$SECONDS
+ hsm_archive_batch $files_num $batch_max "$filebase"
+ elapsed=$((SECONDS - start))
+ do_facet $SINGLEMDS "$LCTL get_param -n \
+ $HSM_PARAM.actions | grep WAITING | wc -l"
+
+ unlinkmany $filebase $files_num || error "unlinkmany $filebase failed"
+ echo "End Phase files_num: $files_num time: $elapsed"
+
+ do_facet $SINGLEMDS "$LCTL get_param -n \
+ $HSM_PARAM.actions | grep WAITING | wc -l"
+
+ cdt_purge
+}
+run_test 50 "Archive with large number of pending HSM actions"
+
test_52() {
# test needs a running copytool
copytool setup
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
local fid=$(create_small_file $f)
# test needs a running copytool
copytool setup
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
local fid=$(create_small_file $f)
run_test 53 "Opened for read file on an evicted client should not be set dirty"
test_54() {
+ mkdir_on_mdt0 $DIR/$tdir
+
local f=$DIR/$tdir/$tfile
local fid=$(create_file "$f" 1MB 39)
run_test 54 "Write during an archive cancels it"
test_55() {
+ mkdir_on_mdt0 $DIR/$tdir
+
local f=$DIR/$tdir/$tfile
local fid=$(create_file "$f" 1MB 39)
run_test 55 "Truncate during an archive cancels it"
test_56() {
+ mkdir_on_mdt0 $DIR/$tdir
+
local f=$DIR/$tdir/$tfile
local fid=$(create_file "$f" 1MB 39)
# test needs a running copytool
copytool setup
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/test_archive_remote
# Create a file on a remote node
do_node $CLIENT2 "dd if=/dev/urandom of=$f bs=1M "\
# test needs a running copytool
copytool setup
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
local sz=$(stat -c %s /etc/passwd)
# This test validates the fix for LU-4512. Ensure that the -u
# option changes the progress reporting interval from the
# default (30 seconds) to the user-specified interval.
+ mkdir_on_mdt0 $DIR/$tdir
+
local f=$DIR/$tdir/$tfile
local fid=$(create_file "$f" 1M 10)
local sleep=1
echo -n "Expecting a progress update within $progress_timeout seconds... "
- while [ true ]; do
+ while true; do
RESULT=$(do_node $(facet_active_host $mds) "$cmd")
if [ -n "$RESULT" ] && [ "$RESULT" -gt 0 ]; then
echo "$RESULT bytes copied in $WAIT seconds."
# test needs a running copytool
copytool setup
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
local fid=$(copy_file /etc/passwd $f)
cdt_disable
# Just start and stop the copytool to generate events.
cdt_clear_no_retry
+ mkdir_on_mdt0 $DIR/$tdir
+
local f=$DIR/$tdir/$tfile
local fid=$(create_small_file "$f")
error "cannot create $test_file on $SINGLEAGT"
copy2archive $test_file $tdir/$tfile
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
copytool import $tdir/$tfile $f
f=$DIR2/$tdir/$tfile
test_90() {
file_count=51 # Max number of files constrained by LNET message size
- mkdir $DIR/$tdir || error "mkdir $DIR/$tdir failed"
+ mkdir_on_mdt0 $DIR/$tdir || error "mkdir $DIR/$tdir failed"
local f=$DIR/$tdir/$tfile
local FILELIST=/tmp/filelist.txt
local i=""
}
run_test 103 "Purge all requests"
+test_103a() {
+ (( MDS1_VERSION >= $(version_code 2.14.56) )) ||
+ skip "Need MDS version at least 2.14.56"
+
+ cdt_clear_non_blocking_restore
+
+ # test needs a running copytool
+ copytool setup
+
+ local -a fids=()
+ local i
+ local rpcs_inflight=$($LCTL get_param -n \
+ "mdc.$(facet_svc mds1)*.max_rpcs_in_flight" |
+ head -n1)
+
+ mkdir_on_mdt0 $DIR/$tdir
+ for ((i=0; i < rpcs_inflight; i++)); do
+ fids+=( $(copy_file /etc/passwd $DIR/$tdir/${tfile}_$i) )
+ done
+ $LFS hsm_archive --archive $HSM_ARCHIVE_NUMBER $DIR/$tdir/*
+
+ local time=0
+ local cnt=0
+ local grep_regex="($(tr ' ' '|' <<< "${fids[*]}")).*action=ARCHIVE.*status=SUCCEED"
+ echo $grep_regex
+ while [[ $time -lt 5 ]] && [[ $cnt -ne ${#fids[@]} ]]; do
+ cnt=$(do_facet mds1 "$LCTL get_param -n $HSM_PARAM.actions |
+ grep -c -E '$grep_regex'")
+ sleep 1
+ ((++time))
+ done
+ [[ $cnt -eq ${#fids[@]} ]] || error "Fail to archive files $cnt/${#fids[@]}"
+
+ $LFS hsm_release $DIR/$tdir/*
+
+ kill_copytools
+ wait_copytools || error "Copytool failed to stop"
+
+ local -a pids=()
+ for i in "${fids[@]}"; do
+ cat $DIR/.lustre/fid/$i > /dev/null & pids+=($!)
+ done
+
+ cdt_purge
+ grep_regex="($(tr ' ' '|' <<< "${fids[*]}")).*action=RESTORE.*status=CANCELED"
+ cnt=$(do_facet mds1 "$LCTL get_param -n $HSM_PARAM.actions |
+ grep -cE '$grep_regex'")
+
+ [[ "$cnt" -eq ${#fids[@]} ]] ||
+ error "Some request have not been canceled ($cnt/${#fids[@]} canceled)"
+
+ # cat cmds should not hang and should fail
+ for i in "${!pids[@]}"; do
+ wait ${pids[$i]} &&
+ error "Restore for ${tfile}_$i (${pids[$i]}) should fail" ||
+ true
+ done
+}
+run_test 103a "Purge pending restore requests"
+
DATA=CEA
DATAHEX='[434541]'
test_104() {
+ mkdir_on_mdt0 $DIR/$tdir
+
local f=$DIR/$tdir/$tfile
local fid=$(create_empty_file "$f")
test_105() {
local max_requests=$(get_hsm_param max_requests)
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
local i=""
stack_trap "set_hsm_param max_requests $max_requests" EXIT
# test needs a running copytool
copytool setup
# create and archive file
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
local f1=$DIR/$tdir/$tfile
local fid=$(copy_file /etc/passwd $f1)
$LFS hsm_archive --archive $HSM_ARCHIVE_NUMBER $f1
# test needs a running copytool
copytool setup
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
copy2archive /etc/passwd $tdir/$tfile
# test needs a running copytool
copytool setup
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
local fid=$(copy_file /etc/passwd $f)
$LFS hsm_archive --archive $HSM_ARCHIVE_NUMBER $f
# test needs a running copytool
copytool setup
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
copy2archive /etc/passwd $tdir/$tfile
local f=$DIR/$tdir/$tfile
# test needs a running copytool
copytool setup
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
local fid=$(copy_file /etc/passwd $f)
stack_trap cdt_clear_no_retry EXIT
# test needs a running copytool
copytool setup
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
local fid=$(copy_file /etc/passwd $f)
cdt_disable
run_test 112 "State of recorded request"
test_113() {
+ mkdir_on_mdt0 $DIR/$tdir
+
local file1=$DIR/$tdir/$tfile
local file2=$DIR2/$tdir/$tfile
run_test 113 "wrong stat after restore"
test_200() {
+ mkdir_on_mdt0 $DIR/$tdir
+
local f=$DIR/$tdir/$tfile
local fid=$(create_empty_file "$f")
test_201() {
# test needs a running copytool
copytool setup
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
create_archive_file $tdir/$tfile
run_test 201 "Register/Cancel restore"
test_202() {
+ mkdir_on_mdt0 $DIR/$tdir
+
local f=$DIR/$tdir/$tfile
local fid=$(create_empty_file "$f")
# test needs a running copytool
copytool setup
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
local fid=$(copy_file /etc/passwd $f)
# test needs a running copytool
copytool setup
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
local fid=$(copy_file /etc/passwd $f)
run_test 220a "Changelog for failed archive"
test_221() {
+ mkdir_on_mdt0 $DIR/$tdir
+
local f=$DIR/$tdir/$tfile
local fid=$(create_empty_file "$f")
# test needs a running copytool
copytool setup
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
copy2archive /etc/passwd $tdir/$tfile
local f=$DIR/$tdir/$tfile
# test needs a running copytool
copytool setup
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
local fid=$(copy_file /etc/passwd $f)
# test needs a running copytool
copytool setup
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
copy2archive /etc/passwd $tdir/$tfile
local f=$DIR/$tdir/$tfile
# test needs a running copytool
copytool setup
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
local fid=$(copy_file /etc/passwd $f)
test_223a() {
# test needs a running copytool
copytool setup -b 1
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
create_archive_file $tdir/$tfile
run_test 223a "Changelog for restore canceled (import case)"
test_223b() {
+ mkdir_on_mdt0 $DIR/$tdir
+
local f=$DIR/$tdir/$tfile
local fid=$(create_empty_file "$f")
# test needs a running copytool
copytool setup
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
local fid=$(copy_file /etc/passwd $f)
# test needs a running copytool
copytool setup
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
local fid=$(copy_file /etc/passwd $f)
# test needs a running copytool
copytool setup
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
local fid=$(create_empty_file "$f")
# test needs a running copytool
copytool setup
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
local f1=$DIR/$tdir/$tfile-1
local f2=$DIR/$tdir/$tfile-2
test_228() {
# test needs a running copytool
copytool setup
+ mkdir_on_mdt0 $DIR/$tdir
local fid=$(create_small_sync_file $DIR/$tfile)
$LFS hsm_archive --archive $HSM_ARCHIVE_NUMBER $DIR/$tfile
# send 1 requests of each kind twice
copytool setup
+
+ mkdir_on_mdt0 $DIR/$tdir
+
# setup the files
for action in archive restore remove; do
local filepath="$file"-to-$action
run_test 250 "Coordinator max request"
test_251() {
+ mkdir_on_mdt0 $DIR/$tdir
+
local f=$DIR/$tdir/$tfile
local fid=$(create_empty_file "$f")
run_test 251 "Coordinator request timeout"
test_252() {
+ mkdir_on_mdt0 $DIR/$tdir
+
local f=$DIR/$tdir/$tfile
local fid=$(create_empty_file "$f")
# test needs a running copytool
copytool setup
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
dd if=/dev/zero of=$f bs=1MB count=10
"set_hsm_param max_requests $(get_hsm_param max_requests)" EXIT
set_hsm_param max_requests "$request_count"
+ mkdir_on_mdt0 $DIR/$tdir
+
local timeout
local count
for request_type in archive restore remove; do
[ $MDS1_VERSION -lt $(version_code 2.12.0) ] &&
skip "Need MDS version at least 2.12.0"
+ mkdir_on_mdt0 $DIR/$tdir
+
local file="$DIR/$tdir/$tfile"
local fid=$(create_empty_file "$file")
local -a files=("$DIR/$tdir/$tfile".{0..15})
local file
+ mkdir_on_mdt0 $DIR/$tdir
+
for file in "${files[@]}"; do
create_small_file "$file"
done
local -a files=("$DIR/$tdir/$tfile".{0..15})
local file
+ mkdir_on_mdt0 $DIR/$tdir
+
for file in "${files[@]}"; do
create_small_file "$file"
done
local -a files=("$DIR/$tdir/$tfile".{0..15})
local file
+ mkdir_on_mdt0 $DIR/$tdir
+
for file in "${files[@]}"; do
create_small_file "$file"
done
}
run_test 260c "Requests are not reordered on the 'hot' path of the coordinator"
+test_261() {
+ local file=$DIR/$tdir/$tfile
+ local size
+ local fid
+
+ copytool setup
+ mkdir_on_mdt0 $DIR/$tdir || error "mkdir $DIR/$tdir failed"
+
+ dd if=/dev/zero of=$file bs=4k count=2 || error "Write $file failed"
+ fid=$(path2fid $file)
+ $LFS hsm_archive --archive $HSM_ARCHIVE_NUMBER $file
+ wait_request_state $fid ARCHIVE SUCCEED
+
+ $LFS hsm_state $file
+ $LFS hsm_release $file
+ $LFS hsm_restore $file
+ wait_request_state $fid RESTORE SUCCEED
+ $LFS hsm_release $file
+ size=$(stat -c %s $file)
+ [[ $size == 8192 ]] || error "Size after HSM release: $size"
+
+ $LFS hsm_release $file
+ $LFS hsm_restore $file
+ $LFS hsm_release $file
+ size=$(stat -c %s $file)
+ [[ $size == 8192 ]] || error "Size after HSM release: $size"
+ $LFS hsm_state $file
+}
+run_test 261 "Report 0 bytes size after HSM release"
+
test_300() {
[ "$CLIENTONLY" ] && skip "CLIENTONLY mode" && return
copytool setup
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
local dir_mdt0=$DIR/$tdir/mdt0
local dir_mdt1=$DIR/$tdir/mdt1
copytool setup
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
local dir_mdt0=$DIR/$tdir/mdt0
local dir_mdt1=$DIR/$tdir/mdt1
test_402b() {
copytool setup
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
touch $f || error "touch $f failed"
copytool setup
# create files on both MDT0000 and MDT0001
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
local dir_mdt0=$DIR/$tdir/mdt0
stack_trap "rm -rf $dir_mdt0" EXIT
copytool setup
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
local striped_dir=$DIR/$tdir/striped_dir
local fid
local mdt_index
+ mkdir_on_mdt0 $DIR/$tdir
+
fid=$(create_small_file $DIR/$tdir/$tfile)
echo "old fid $fid"
run_test 406 "attempting to migrate HSM archived files is safe"
test_407() {
+ mkdir_on_mdt0 $DIR/$tdir
+
local f=$DIR/$tdir/$tfile
local f2=$DIR2/$tdir/$tfile
local fid=$(create_empty_file "$f")
test_500()
{
- [ $MDS1_VERSION -lt $(version_code 2.6.92) ] &&
+ [ "$MDS1_VERSION" -lt $(version_code 2.6.92) ] &&
skip "HSM migrate is not supported"
test_mkdir -p $DIR/$tdir
- if [ $(lustre_version_code client) -lt $(version_code 2.11.56) ] ||
- [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.11.56) ];
+ if [ "$CLIENT_VERSION" -lt $(version_code 2.11.56) ] ||
+ [ "$MDS1_VERSION" -lt $(version_code 2.11.56) ];
then
llapi_hsm_test -d $DIR/$tdir -b ||
error "One llapi HSM test failed"
run_test 500 "various LLAPI HSM tests"
test_600() {
- [ $MDS1_VERSION -lt $(version_code 2.10.58) ] &&
+ [ "$MDS1_VERSION" -lt $(version_code 2.10.58) ] &&
skip "need MDS version at least 2.10.58"
mkdir -p $DIR/$tdir
[ $MDS1_VERSION -lt $(version_code 2.10.58) ] &&
skip "need MDS version at least 2.10.58"
+ stack_trap "restore_opencache" EXIT
+ disable_opencache
+
mkdir -p $DIR/$tdir
local f=$DIR/$tdir/$tfile
[ $MDS1_VERSION -lt $(version_code 2.10.58) ] &&
skip "need MDS version at least 2.10.58"
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
local f2=$DIR2/$tdir/$tfile
[ $MDS1_VERSION -lt $(version_code 2.10.58) ] &&
skip "need MDS version at least 2.10.58"
+ stack_trap "restore_opencache" EXIT
+ disable_opencache
+
mkdir -p $DIR/$tdir
local f=$DIR/$tdir/$tfile
local llog_reader=$(do_facet mgs "which llog_reader 2> /dev/null")
llog_reader=${llog_reader:-$LUSTRE/utils/llog_reader}
[ -z $(do_facet mgs ls -d $llog_reader 2> /dev/null) ] &&
- skip_env "missing llog_reader" && return
- local fstype=$(facet_fstype mds1)
+ skip_env "missing llog_reader"
- mkdir -p $DIR/$tdir
+ mkdir_on_mdt0 $DIR/$tdir
local f=$DIR/$tdir/$tfile
local entry
#remount mds1 as ldiskfs or zfs type
- stack_trap "stop mds1; start mds1 $(mdsdevname 1) $MDS_MOUNT_OPTS" EXIT
stop mds1 || error "stop mds1 failed"
+ stack_trap "unmount_fstype mds1; start mds1 $(mdsdevname 1)\
+ $MDS_MOUNT_OPTS" EXIT
mount_fstype mds1 || error "remount mds1 failed"
for ((i = 0; i < 1; i++)); do
[ -n "$nid" ] || error "nid is empty"
echo "Got NID $nid"
[ -n "$nid" ] && [[ "${CLIENT_NIDS[*]}" =~ $nid ]] ||
- error "nid '$nid' does not match any NID ${CLIENT_NIDS[@]}"
+ error "nid '$nid' does not match any NID ${CLIENT_NIDS[*]}"
}
run_test 606 "llog_reader groks changelog fields"