Whamcloud - gitweb
LU-10447 tests: replace $SET/$GETSTRIPE for misc tests
[fs/lustre-release.git] / lustre / tests / sanity-hsm.sh
index 97a5129..7a4d3c2 100755 (executable)
@@ -226,27 +226,6 @@ copytool_monitor_setup() {
        fi
 }
 
-copytool_monitor_cleanup() {
-       local facet=${1:-$SINGLEAGT}
-       local agent=$(facet_active_host $facet)
-
-       if [ -n "$HSMTOOL_MONITOR_DIR" ]; then
-               # Should die when the copytool dies, but just in case.
-               local cmd="kill \\\$(cat $HSMTOOL_MONITOR_DIR/monitor_pid)"
-               cmd+=" 2>/dev/null || true"
-               do_node $agent "$cmd"
-               do_node $agent "rm -fr $HSMTOOL_MONITOR_DIR"
-               export HSMTOOL_MONITOR_DIR=
-       fi
-
-       # The pdsh should die on its own when the monitor dies. Just
-       # in case, though, try to clean up to avoid any cruft.
-       if [ -n "$HSMTOOL_MONITOR_PDSH" ]; then
-               kill $HSMTOOL_MONITOR_PDSH 2>/dev/null || true
-               export HSMTOOL_MONITOR_PDSH=
-       fi
-}
-
 fid2archive()
 {
        local fid="$1"
@@ -258,134 +237,6 @@ fid2archive()
        esac
 }
 
-copytool_logfile()
-{
-       local host="$(facet_host "$1")"
-       local prefix=$TESTLOG_PREFIX
-       [ -n "$TESTNAME" ] && prefix+=.$TESTNAME
-
-       printf "${prefix}.copytool${archive_id}_log.${host}.log"
-}
-
-__lhsmtool_rebind()
-{
-       do_facet $facet $HSMTOOL -p "$hsm_root" --rebind "$@" "$mountpoint"
-}
-
-__lhsmtool_import()
-{
-       mkdir -p "$(dirname "$2")" ||
-               error "cannot create directory '$(dirname "$2")'"
-       do_facet $facet $HSMTOOL -p "$hsm_root" --import "$@" "$mountpoint"
-}
-
-__lhsmtool_setup()
-{
-       local cmd="$HSMTOOL $HSMTOOL_VERBOSE --daemon --hsm-root \"$hsm_root\""
-       [ -n "$bandwidth" ] && cmd+=" --bandwidth $bandwidth"
-       [ -n "$archive_id" ] && cmd+=" --archive $archive_id"
-       [ ${#misc_options[@]} -gt 0 ] &&
-               cmd+=" $(IFS=" " echo "$@")"
-       cmd+=" \"$mountpoint\""
-
-       echo "Starting copytool $facet on $(facet_host $facet)"
-       stack_trap "do_facet $facet libtool execute pkill -x '$HSMTOOL' || true" EXIT
-       do_facet $facet "$cmd < /dev/null > \"$(copytool_logfile $facet)\" 2>&1"
-}
-
-hsm_root() {
-       local facet="${1:-$SINGLEAGT}"
-
-       printf "$(copytool_device "$facet")/${TESTSUITE}.${TESTNAME}/"
-}
-
-# Main entry point to perform copytool related operations
-#
-# Sub-commands:
-#
-#      setup   setup a copytool to run in the background, that copytool will be
-#              killed on EXIT
-#      import  import a file from an HSM backend
-#      rebind  rebind an archived file to a new fid
-#
-# Although the semantics might suggest otherwise, one does not need to 'setup'
-# a copytool before a call to 'copytool import' or 'copytool rebind'.
-#
-copytool()
-{
-       local action=$1
-       shift
-
-       # Parse arguments
-       local fail_on_error=true
-       local -a misc_options
-       while [ $# -gt 0 ]; do
-               case "$1" in
-               -f|--facet)
-                       shift
-                       local facet="$1"
-                       ;;
-               -m|--mountpoint)
-                       shift
-                       local mountpoint="$1"
-                       ;;
-               -a|--archive-id)
-                       shift
-                       local archive_id="$1"
-                       ;;
-               -b|--bwlimit)
-                       shift
-                       local bandwidth="$1" # in MB/s
-                       ;;
-               -n|--no-fail)
-                       local fail_on_error=false
-                       ;;
-               *)
-                       # Uncommon(/copytool dependent) option
-                       misc_options+=("$1")
-                       ;;
-               esac
-               shift
-       done
-
-       # Use default values if needed
-       local facet=${facet:-$SINGLEAGT}
-       local mountpoint="${mountpoint:-${MOUNT2:-$MOUNT}}"
-       local hsm_root="$(hsm_root "$facet")"
-
-       stack_trap "do_facet $facet rm -rf '$hsm_root'" EXIT
-       do_facet $facet mkdir -p "$hsm_root" ||
-               error "mkdir '$hsm_root' failed"
-
-       case "$HSMTOOL" in
-       lhsmtool_posix)
-               local copytool=lhsmtool
-               ;;
-       esac
-
-       __${copytool}_${action} "${misc_options[@]}"
-       if [ $? -ne 0 ]; then
-               local error_msg
-
-               case $action in
-               setup)
-                       local host="$(facet_host $facet)"
-                       error_msg="Failed to start copytool $facet on '$host'"
-                       ;;
-               import)
-                       local src="${misc_options[0]}"
-                       local dest="${misc_options[1]}"
-                       error_msg="Failed to import '$src' to '$dest'"
-                       ;;
-               rebind)
-                       error_msg="could not rebind file"
-                       ;;
-               esac
-
-               $fail_on_error && error "$error_msg" || echo "$error_msg"
-       fi
-}
-
 get_copytool_event_log() {
        local facet=${1:-$SINGLEAGT}
        local agent=$(facet_active_host $facet)
@@ -508,55 +359,12 @@ copy2archive() {
                error "cannot copy '$1' to '$file'"
 }
 
-mdts_set_param() {
-       local arg=$1
-       local key=$2
-       local value=$3
-       local mdtno
-       local rc=0
-       if [[ "$value" != "" ]]; then
-               value="=$value"
-       fi
-       for mdtno in $(seq 1 $MDSCOUNT); do
-               local idx=$(($mdtno - 1))
-               local facet=mds${mdtno}
-               # if $arg include -P option, run 1 set_param per MDT on the MGS
-               # else, run set_param on each MDT
-               [[ $arg = *"-P"* ]] && facet=mgs
-               do_facet $facet $LCTL set_param $arg mdt.${MDT[$idx]}.$key$value
-               [[ $? != 0 ]] && rc=1
-       done
-       return $rc
-}
-
-mdts_check_param() {
-       local key="$1"
-       local target="$2"
-       local timeout="$3"
-       local mdtno
-       for mdtno in $(seq 1 $MDSCOUNT); do
-               local idx=$(($mdtno - 1))
-               wait_result mds${mdtno} \
-                       "$LCTL get_param -n $MDT_PREFIX${idx}.$key" "$target" \
-                       $timeout ||
-                       error "$key state is not '$target' on mds${mdtno}"
-       done
-}
-
 get_hsm_param() {
        local param=$1
        local val=$(do_facet $SINGLEMDS $LCTL get_param -n $HSM_PARAM.$param)
        echo $val
 }
 
-set_hsm_param() {
-       local param=$1
-       local value=$2
-       local opt=$3
-       mdts_set_param "$opt -n" "hsm.$param" "$value"
-       return $?
-}
-
 set_test_state() {
        local cmd=$1
        local target=$2
@@ -564,15 +372,6 @@ set_test_state() {
        mdts_check_param hsm_control "$target" 10
 }
 
-cdt_set_sanity_policy() {
-       if [[ "$CDT_POLICY_HAD_CHANGED" ]]
-       then
-               # clear all
-               mdts_set_param "" hsm.policy "+NRA"
-               mdts_set_param "" hsm.policy "-NBR"
-               CDT_POLICY_HAD_CHANGED=
-       fi
-}
 
 cdt_set_no_retry() {
        mdts_set_param "" hsm.policy "+NRA"
@@ -598,21 +397,6 @@ cdt_clear_mount_state() {
        mdts_set_param "-P -d" hsm_control ""
 }
 
-cdt_set_mount_state() {
-       mdts_set_param "-P" hsm_control "$1"
-       # set_param -P is asynchronous operation and could race with set_param.
-       # In such case configs could be retrieved and applied at mgc after
-       # set_param -P completion. Sleep here to avoid race with set_param.
-       # We need at least 20 seconds. 10 for mgc_requeue_thread to wake up
-       # MGC_TIMEOUT_MIN_SECONDS + MGC_TIMEOUT_RAND_CENTISEC(5 + 5)
-       # and 10 seconds to retrieve config from server.
-       sleep 20
-}
-
-cdt_check_state() {
-       mdts_check_param hsm_control "$1" 20
-}
-
 cdt_disable() {
        set_test_state disabled disabled
 }
@@ -635,37 +419,6 @@ cdt_restart() {
        cdt_set_sanity_policy
 }
 
-needclients() {
-       local client_count=$1
-       if [[ $CLIENTCOUNT -lt $client_count ]]; then
-               skip "Need $client_count or more clients, have $CLIENTCOUNT"
-               return 1
-       fi
-       return 0
-}
-
-path2fid() {
-       $LFS path2fid $1 | tr -d '[]'
-       return ${PIPESTATUS[0]}
-}
-
-get_hsm_flags() {
-       local f=$1
-       local u=$2
-       local st
-
-       if [[ $u == "user" ]]; then
-               st=$($RUNAS $LFS hsm_state $f)
-       else
-               u=root
-               st=$($LFS hsm_state $f)
-       fi
-
-       [[ $? == 0 ]] || error "$LFS hsm_state $f failed (run as $u)"
-
-       st=$(echo $st | cut -f 2 -d" " | tr -d "()," )
-       echo $st
-}
 
 get_hsm_archive_id() {
        local f=$1
@@ -677,14 +430,6 @@ get_hsm_archive_id() {
        echo $ar
 }
 
-check_hsm_flags() {
-       local f=$1
-       local fl=$2
-
-       local st=$(get_hsm_flags $f)
-       [[ $st == $fl ]] || error "hsm flags on $f are $st != $fl"
-}
-
 check_hsm_flags_user() {
        local f=$1
        local fl=$2
@@ -721,27 +466,6 @@ delete_large_files() {
        wait_delete_completed
 }
 
-wait_result() {
-       local facet=$1
-       shift
-       wait_update --verbose $(facet_active_host $facet) "$@"
-}
-
-wait_request_state() {
-       local fid=$1
-       local request=$2
-       local state=$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.actions"
-       cmd+=" | awk '/'$fid'.*action='$request'/ {print \\\$13}' | cut -f2 -d="
-
-       wait_result $mds "$cmd" "$state" 200 ||
-               error "request on $fid is not $state on $mds"
-}
-
 get_request_state() {
        local fid=$1
        local request=$2
@@ -938,11 +662,8 @@ test_1a() {
 }
 run_test 1a "mmap & cat a HSM released file"
 
-test_1b() {
-       mkdir -p $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
+test_1bde_base() {
+       local f=$1
        rm -f $f
 
        dd if=/dev/urandom of=$f bs=1M count=1 conv=sync ||
@@ -966,6 +687,15 @@ test_1b() {
        echo "verify restored state: "
        check_hsm_flags $f "0x00000009" && echo "pass"
 }
+
+test_1b() {
+       mkdir -p $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
+
+       test_1bde_base $f
+}
 run_test 1b "Archive, Release and Restore composite file"
 
 test_1c() {
@@ -1029,37 +759,56 @@ test_1c() {
 run_test 1c "Check setting archive-id in lfs hsm_set"
 
 test_1d() {
-       [ $MDS_VERSION_CODE -lt $(version_code 2.10.59) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.10.59) ] &&
                skip "need MDS version at least 2.10.59"
 
        mkdir -p $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
-       rm -f $f
 
-       dd if=/dev/urandom of=$f bs=1M count=1 conv=sync ||
-               error "failed to create file"
-       local fid=$(path2fid $f)
+       test_1bde_base $f
+}
+run_test 1d "Archive, Release and Restore DoM file"
 
-       copytool setup
+test_1e() {
+       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code $SEL_VER) ] &&
+               skip "skipped for lustre < $SEL_VER"
 
-       echo "archive $f"
-       $LFS hsm_archive $f || error "could not archive file"
-       wait_request_state $fid ARCHIVE SUCCEED
+       mkdir -p $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
 
-       echo "release $f"
-       $LFS hsm_release $f || error "could not release file"
-       echo "verify released state: "
-       check_hsm_flags $f "0x0000000d" && echo "pass"
+       test_1bde_base $comp_file
 
-       echo "restore $f"
-       $LFS hsm_restore $f || error "could not restore file"
-       wait_request_state $fid RESTORE SUCCEED
-       echo "verify restored state: "
-       check_hsm_flags $f "0x00000009" && echo "pass"
+       local flg_opts="--comp-start 0 -E 64M --comp-flags init"
+       local found=$($LFS find $flg_opts $comp_file | wc -l)
+       [ $found -eq 1 ] || error "1st component not found"
+
+       flg_opts="--comp-start 64M -E 1G --comp-flags extension"
+       found=$($LFS find $flg_opts $comp_file | wc -l)
+       [ $found -eq 1 ] || error "2nd component not found"
+
+       flg_opts="--comp-start 1G -E 1G --comp-flags ^init"
+       found=$($LFS find $flg_opts $comp_file | wc -l)
+       [ $found -eq 1 ] || error "3rd component not found"
+
+       flg_opts="--comp-start 1G -E 10G --comp-flags extension"
+       found=$($LFS find $flg_opts $comp_file | wc -l)
+       [ $found -eq 1 ] || error "4th component not found"
+
+       flg_opts="--comp-start 10G -E 10G --comp-flags ^init"
+       found=$($LFS find $flg_opts $comp_file | wc -l)
+       [ $found -eq 1 ] || error "5th component not found"
+
+       flg_opts="--comp-start 10G -E EOF --comp-flags extension"
+       found=$($LFS find $flg_opts $comp_file | wc -l)
+       [ $found -eq 1 ] || error "6th component not found"
+
+       sel_layout_sanity $comp_file 6
 }
-run_test 1d "Archive, Release and Restore DoM file"
+run_test 1e "Archive, Release and Restore SEL file"
 
 test_2() {
        local f=$DIR/$tdir/$tfile
@@ -1302,7 +1051,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)
@@ -1623,7 +1372,7 @@ test_12p() {
 run_test 12p "implicit restore of a file on copytool mount point"
 
 test_12q() {
-       [ $MDS_VERSION_CODE -lt $(version_code 2.7.58) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.7.58) ] &&
                skip "need MDS version at least 2.7.58"
 
        stack_trap "zconf_umount \"$(facet_host $SINGLEAGT)\" \"$MOUNT3\"" EXIT
@@ -2264,7 +2013,7 @@ test_24f() {
 run_test 24f "root can archive, release, and restore tar files"
 
 test_24g() {
-       [ $MDS_VERSION_CODE -lt $(version_code 2.11.56) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.11.56) ] &&
                skip "need MDS version 2.11.56 or later"
 
        local file=$DIR/$tdir/$tfile
@@ -3298,7 +3047,7 @@ run_test 58 "Truncate a released file will trigger restore"
 
 test_59() {
        local fid
-       [[ $MDS_VERSION_CODE -lt $(version_code 2.7.63) ]] &&
+       [[ $MDS1_VERSION -lt $(version_code 2.7.63) ]] &&
                skip "Need MDS version at least 2.7.63"
 
        copytool setup
@@ -4619,7 +4368,7 @@ run_test 253 "Check for wrong file size after release"
 
 test_254a()
 {
-       [ $MDS_VERSION_CODE -lt $(version_code 2.10.56) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.10.56) ] &&
                skip "need MDS version at least 2.10.56"
 
        # Check that the counters are initialized to 0
@@ -4637,7 +4386,7 @@ run_test 254a "Request counters are initialized to zero"
 
 test_254b()
 {
-       [ $MDS_VERSION_CODE -lt $(version_code 2.10.56) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.10.56) ] &&
                skip "need MDS version at least 2.10.56"
 
        # The number of request to launch (at least 32)
@@ -4763,7 +4512,7 @@ run_test 255 "Copytool registration wakes the coordinator up"
 # break in the future because of that.
 test_260a()
 {
-       [ $MDS_VERSION_CODE -lt $(version_code 2.11.56) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.11.56) ] &&
                skip "need MDS version 2.11.56 or later"
 
        local -a files=("$DIR/$tdir/$tfile".{0..15})
@@ -4829,7 +4578,7 @@ run_test 260a "Restore request have priority over other requests"
 # mechanism in the coordinator. It might not make sense to keep it in the future
 test_260b()
 {
-       [ $MDS_VERSION_CODE -lt $(version_code 2.11.56) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.11.56) ] &&
                skip "need MDS version 2.11.56 or later"
 
        local -a files=("$DIR/$tdir/$tfile".{0..15})
@@ -5269,7 +5018,7 @@ run_test 405 "archive and release under striped directory"
 test_406() {
        [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return 0
 
-       [ $MDS_VERSION_CODE -lt $(version_code 2.7.64) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.7.64) ] &&
                skip "need MDS version at least 2.7.64"
 
        local fid
@@ -5362,7 +5111,7 @@ run_test 407 "Check for double RESTORE records in llog"
 
 test_500()
 {
-       [ $MDS_VERSION_CODE -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
@@ -5380,7 +5129,7 @@ test_500()
 run_test 500 "various LLAPI HSM tests"
 
 test_600() {
-       [ $MDS_VERSION_CODE -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
@@ -5413,7 +5162,7 @@ test_600() {
 run_test 600 "Changelog fields 'u=' and 'nid='"
 
 test_601() {
-       [ $MDS_VERSION_CODE -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
@@ -5436,7 +5185,7 @@ test_601() {
 run_test 601 "OPEN Changelog entry"
 
 test_602() {
-       [ $MDS_VERSION_CODE -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
@@ -5483,7 +5232,7 @@ test_602() {
 run_test 602 "Changelog record CLOSE only if open+write or OPEN recorded"
 
 test_603() {
-       [ $MDS_VERSION_CODE -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
@@ -5508,7 +5257,7 @@ test_603() {
 run_test 603 "GETXATTR Changelog entry"
 
 test_604() {
-       [ $MDS_VERSION_CODE -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
@@ -5584,7 +5333,7 @@ test_604() {
 run_test 604 "NOPEN Changelog entry"
 
 test_605() {
-       [ $MDS_VERSION_CODE -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
@@ -5666,7 +5415,7 @@ test_605() {
 run_test 605 "Test OPEN and CLOSE rate limit in Changelogs"
 
 test_606() {
-       [ $MDS_VERSION_CODE -lt $(version_code 2.10.58) ] &&
+       [ $MDS1_VERSION -lt $(version_code 2.10.58) ] &&
                skip "need MDS version at least 2.10.58"
 
        local llog_reader=$(do_facet mgs "which llog_reader 2> /dev/null")