X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Ftests%2Ftest-framework.sh;h=0da57f60de7839520d6bb125da3ec3dfa0b2255c;hb=d16729c7e2e7d8b825181686ad42def3121f8445;hp=f9ab7a6cd547a642e7b20fbdf7ebb6353ea81be8;hpb=d7b109d598674dcd7c654ca0fe06368d52eaeb3b;p=fs%2Flustre-release.git diff --git a/lustre/tests/test-framework.sh b/lustre/tests/test-framework.sh index f9ab7a6..0da57f6 100644 --- a/lustre/tests/test-framework.sh +++ b/lustre/tests/test-framework.sh @@ -298,6 +298,7 @@ init_test_env() { fi export SHUTDOWN_ATTEMPTS=${SHUTDOWN_ATTEMPTS:-3} + export OSD_TRACK_DECLARES_LBUG=${OSD_TRACK_DECLARES_LBUG:-"yes"} # command line @@ -491,6 +492,7 @@ load_modules_local() { grep -q crc16 $SYMLIST || { modprobe crc16 2>/dev/null || true; } grep -q -w jbd $SYMLIST || { modprobe jbd 2>/dev/null || true; } grep -q -w jbd2 $SYMLIST || { modprobe jbd2 2>/dev/null || true; } + load_module lfsck/lfsck [ "$LQUOTA" != "no" ] && load_module quota/lquota $LQUOTAOPTS if [[ $(node_fstypes $HOSTNAME) == *zfs* ]]; then modprobe zfs @@ -592,7 +594,7 @@ fs_log_size() { local size=0 case $fstype in ldiskfs) size=50;; # largest seen is 44, leave some headroom - zfs) size=256;; + zfs) size=400;; # largest seen is 384 esac echo -n $size @@ -899,6 +901,7 @@ export_zpool() { if [[ -n "$poolname" ]]; then do_facet $facet "! $ZPOOL list -H $poolname >/dev/null 2>&1 || + grep -q ^$poolname/ /proc/mounts || $ZPOOL export $opts $poolname" fi } @@ -917,7 +920,8 @@ import_zpool() { if [[ -n "$poolname" ]]; then opts+=" -d $(dirname $(facet_vdevice $facet))" - do_facet $facet "$ZPOOL import -f $opts $poolname" + do_facet $facet "$ZPOOL list -H $poolname >/dev/null 2>&1 || + $ZPOOL import -f $opts $poolname" fi } @@ -1869,30 +1873,43 @@ cleanup_check() { } wait_update () { - local node=$1 - local TEST=$2 - local FINAL=$3 - local MAX=${4:-90} - - local RESULT - local WAIT=0 - local sleep=1 - local print=10 - while [ true ]; do - RESULT=$(do_node $node "$TEST") - if [ "$RESULT" == "$FINAL" ]; then - [ -z "$RESULT" -o $WAIT -le $sleep ] || - echo "Updated after ${WAIT}s: wanted '$FINAL' got '$RESULT'" - return 0 - fi - [ $WAIT -ge $MAX ] && break - [ $((WAIT % print)) -eq 0 ] && - echo "Waiting $((MAX - WAIT)) secs for update" - WAIT=$((WAIT + sleep)) - sleep $sleep - done - echo "Update not seen after ${MAX}s: wanted '$FINAL' got '$RESULT'" - return 3 + local verbose=false + if [[ "$1" == "--verbose" ]]; then + shift + verbose=true + fi + + local node=$1 + local TEST=$2 + local FINAL=$3 + local MAX=${4:-90} + local RESULT + local PREV_RESULT + local WAIT=0 + local sleep=1 + local print=10 + + while [ true ]; do + RESULT=$(do_node $node "$TEST") + if [[ "$RESULT" == "$FINAL" ]]; then + [[ -z "$RESULT" || $WAIT -le $sleep ]] || + echo "Updated after ${WAIT}s: wanted '$FINAL'"\ + "got '$RESULT'" + return 0 + fi + if [[ $verbose && "$RESULT" != "$PREV_RESULT" ]]; then + echo "Changed after ${WAIT}s: from '$PREV_RESULT'"\ + "to '$RESULT'" + PREV_RESULT=$RESULT + fi + [[ $WAIT -ge $MAX ]] && break + [[ $((WAIT % print)) -eq 0 ]] && + echo "Waiting $((MAX - WAIT)) secs for update" + WAIT=$((WAIT + sleep)) + sleep $sleep + done + echo "Update not seen after ${MAX}s: wanted '$FINAL' got '$RESULT'" + return 3 } wait_update_facet() { @@ -3529,10 +3546,17 @@ is_empty_dir() { # empty lustre filesystem may have empty directories lost+found and .lustre is_empty_fs() { + # exclude .lustre & lost+found [ $(find $1 -maxdepth 1 -name lost+found -o -name .lustre -prune -o \ -print | wc -l) = 1 ] || return 1 [ ! -d $1/lost+found ] || is_empty_dir $1/lost+found || return 1 - [ ! -d $1/.lustre ] || is_empty_dir $1/.lustre || return 1 + if [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.4.0) ]; then + # exclude .lustre/fid (LU-2780) + [ $(find $1/.lustre -maxdepth 1 -name fid -prune -o \ + -print | wc -l) = 1 ] || return 1 + else + [ ! -d $1/.lustre ] || is_empty_dir $1/.lustre || return 1 + fi return 0 } @@ -3594,10 +3618,13 @@ check_and_setup_lustre() { set_default_debug_nodes $(comma_list $(nodes_list)) fi - if [ -n "$OSD_TRACK_DECLARES_LBUG" ] ; then - do_nodes $(comma_list $(mdts_nodes) $(osts_nodes)) \ - "$LCTL set_param osd-*.track_declares_assert=1" \ - > /dev/null + if [ $(lower $OSD_TRACK_DECLARES_LBUG) == 'yes' ] ; then + local facets="$(get_facets OST),$(get_facets MDS),mgs" + local nodes="$(facets_hosts ${facets})" + if [ -n "$nodes" ] ; then + do_nodes $nodes "$LCTL set_param \ + osd-ldiskfs.track_declares_assert=1 || true" + fi fi init_gss @@ -6061,24 +6088,23 @@ run_llverfs() #Remove objects from OST remove_ost_objects() { - shift - local ostdev=$1 - local group=$2 - shift 2 + local facet=$1 + local ostdev=$2 + local group=$3 + shift 3 local objids="$@" - local facet=ost$((OSTIDX + 1)) local mntpt=$(facet_mntpt $facet) local opts=$OST_MOUNT_OPTS local i local rc echo "removing objects from $ostdev on $facet: $objids" - if ! do_facet $facet test -b $ostdev; then + if ! test -b $ostdev; then opts=$(csa_add "$opts" -o loop) fi mount -t $(facet_fstype $facet) $opts $ostdev $mntpt || return $? - rc=0; + rc=0 for i in $objids; do rm $mntpt/O/$group/d$((i % 32))/$i || { rc=$?; break; } done @@ -6102,7 +6128,7 @@ remove_mdt_files() { fi mount -t $(facet_fstype $facet) $opts $mdtdev $mntpt || return $? - rc=0; + rc=0 for f in $files; do rm $mntpt/ROOT/$f || { rc=$?; break; } done @@ -6360,41 +6386,28 @@ generate_logname() { echo "$TESTLOG_PREFIX.$TESTNAME.$logname.$(hostname -s).log" } -# mkdir directory on different MDTs +# make directory on different MDTs test_mkdir() { local option local parent local child local path - local dir local rc=0 - if [ $# -eq 2 ]; then - option=$1 - path=$2 - else - path=$1 - fi - - child=${path##*/} - parent=${path%/*} + case $# in + 1) path=$1;; + 2) option=$1 + path=$2;; + *) error "Only creating single directory is supported";; + esac - if [ "$parent" == "$child" ]; then - parent=$(pwd) - fi + child=$(basename $path) + parent=$(dirname $path) - if [ "$option" == "-p" -a -d ${parent}/${child} ]; then + if [ "$option" == "-p" -a -d $parent/$child ]; then return $rc fi - # it needs to check whether there is further / in child - dir=$(echo $child | awk -F '/' '{print $2}') - if [ ! -z "$dir" ]; then - local subparent=$(echo $child | awk -F '/' '{ print $1 }') - parent=${parent}"/"${subparent} - child=$dir - fi - if [ ! -d ${parent} ]; then if [ "$option" == "-p" ]; then mkdir -p ${parent} @@ -6404,19 +6417,18 @@ test_mkdir() { fi if [ $MDSCOUNT -le 1 ]; then - mkdir $option ${parent}/${child} || rc=$? + mkdir $option $parent/$child || rc=$? else local mdt_idx=$($LFS getstripe -M $parent) + local test_num=$(echo $testnum | sed -e 's/[^0-9]*//g') if [ "$mdt_idx" -ne 0 ]; then - mkdir $option ${parent}/${child} || rc=$? - return $rc + mkdir $option $parent/$child || rc=$? + else + mdt_idx=$((test_num % MDSCOUNT)) + echo "mkdir $mdt_idx for $parent/$child" + $LFS setdirstripe -i $mdt_idx $parent/$child || rc=$? fi - - local test_num=$(echo $testnum | sed -e 's/[^0-9]*//g') - local mdt_idx=$((test_num % MDSCOUNT)) - echo "mkdir $mdt_idx for ${parent}/${child}" - $LFS setdirstripe -i $mdt_idx ${parent}/${child} || rc=$? fi return $rc }