Whamcloud - gitweb
LU-7110 tests: sanity-hsm.sh can erase all files on filesystem
[fs/lustre-release.git] / lustre / tests / test-framework.sh
index eaa4878..9037f7e 100755 (executable)
@@ -817,7 +817,7 @@ facet_type() {
 facet_number() {
        local facet=$1
 
-       if [ $facet == mgs ]; then
+       if [ $facet == mgs ] || [ $facet == client ]; then
                return 1
        fi
 
@@ -1223,6 +1223,8 @@ mount_facet() {
        local opt=${facet}_opt
        local mntpt=$(facet_mntpt $facet)
        local opts="${!opt} $@"
+       local fstype=$(facet_fstype $facet)
+       local devicelabel
 
        module_loaded lustre || load_modules
 
@@ -1236,6 +1238,16 @@ mount_facet() {
                import_zpool $facet || return ${PIPESTATUS[0]}
        fi
 
+       case $fstype in
+       ldiskfs)
+               devicelabel=$(do_facet ${facet} "$E2LABEL ${!dev}");;
+       zfs)
+               devicelabel=$(do_facet ${facet} "$ZFS get -H -o value \
+                                               lustre:svname ${!dev}");;
+       *)
+               error "unknown fstype!";;
+       esac
+
        echo "Starting ${facet}: $opts ${!dev} $mntpt"
        # for testing LU-482 error handling in mount_facets() and test_0a()
        if [ -f $TMP/test-lu482-trigger ]; then
@@ -1261,7 +1273,6 @@ mount_facet() {
        if [[ $opts =~ .*nosvc.* ]]; then
                echo "Start ${!dev} without service"
        else
-               local fstype=$(facet_fstype $facet)
 
                case $fstype in
                ldiskfs)
@@ -1279,6 +1290,12 @@ mount_facet() {
                esac
        fi
 
+       # commit the device label change to disk
+       if [[ $devicelabel =~ (:[a-zA-Z]{3}[0-9]{4}) ]]; then
+               do_facet $facet "sync; sync; sync"
+       fi
+
+
        label=$(devicelabel ${facet} ${!dev})
        [ -z "$label" ] && echo no label for ${!dev} && exit 1
        eval export ${facet}_svc=${label}
@@ -1482,25 +1499,37 @@ setup_quota(){
 }
 
 zconf_mount() {
-    local client=$1
-    local mnt=$2
-    local opts=${3:-$MOUNT_OPTS}
-    opts=${opts:+-o $opts}
-    local flags=${4:-$MOUNT_FLAGS}
-
-    local device=$MGSNID:/$FSNAME
-    if [ -z "$mnt" -o -z "$FSNAME" ]; then
-        echo Bad zconf mount command: opt=$flags $opts dev=$device mnt=$mnt
-        exit 1
-    fi
+       local client=$1
+       local mnt=$2
+       local opts=${3:-$MOUNT_OPTS}
+       opts=${opts:+-o $opts}
+       local flags=${4:-$MOUNT_FLAGS}
+
+       local device=$MGSNID:/$FSNAME$FILESET
+       if [ -z "$mnt" -o -z "$FSNAME" ]; then
+               echo "Bad mount command: opt=$flags $opts dev=$device " \
+                    "mnt=$mnt"
+               exit 1
+       fi
+
+       echo "Starting client: $client: $flags $opts $device $mnt"
+       do_node $client mkdir -p $mnt
+       if [ -n "$FILESET" -a -z "$SKIP_FILESET" ];then
+               do_node $client $MOUNT_CMD $flags $opts $MGSNID:/$FSNAME \
+                       $mnt || return 1
+               #disable FILESET if not supported
+               do_nodes $client lctl get_param -n \
+                       mdc.$FSNAME-MDT0000*.import | grep -q subtree ||
+                               device=$MGSNID:/$FSNAME
+               do_node $client mkdir -p $mnt/$FILESET
+               do_node $client "! grep -q $mnt' ' /proc/mounts ||
+                       umount $mnt"
+       fi
+       do_node $client $MOUNT_CMD $flags $opts $device $mnt || return 1
+
+       set_default_debug_nodes $client
 
-    echo "Starting client: $client: $flags $opts $device $mnt"
-    do_node $client mkdir -p $mnt
-    do_node $client $MOUNT_CMD $flags $opts $device $mnt || return 1
-
-    set_default_debug_nodes $client
-
-    return 0
+       return 0
 }
 
 zconf_umount() {
@@ -1590,21 +1619,35 @@ sanity_mount_check () {
 
 # mount clients if not mouted
 zconf_mount_clients() {
-    local clients=$1
-    local mnt=$2
-    local opts=${3:-$MOUNT_OPTS}
-    opts=${opts:+-o $opts}
-    local flags=${4:-$MOUNT_FLAGS}
-
-    local device=$MGSNID:/$FSNAME
-    if [ -z "$mnt" -o -z "$FSNAME" ]; then
-        echo Bad zconf mount command: opt=$flags $opts dev=$device mnt=$mnt
-        exit 1
-    fi
-
-    echo "Starting client $clients: $flags $opts $device $mnt"
-
-    do_nodes $clients "
+       local clients=$1
+       local mnt=$2
+       local opts=${3:-$MOUNT_OPTS}
+       opts=${opts:+-o $opts}
+       local flags=${4:-$MOUNT_FLAGS}
+
+       local device=$MGSNID:/$FSNAME$FILESET
+       if [ -z "$mnt" -o -z "$FSNAME" ]; then
+               echo "Bad conf mount command: opt=$flags $opts dev=$device " \
+                    "mnt=$mnt"
+               exit 1
+       fi
+
+       echo "Starting client $clients: $flags $opts $device $mnt"
+       if [ -n "$FILESET" -a ! -n "$SKIP_FILESET" ]; then
+               do_nodes $clients "! grep -q $mnt' ' /proc/mounts ||
+                       umount $mnt"
+               do_nodes $clients $MOUNT_CMD $flags $opts $MGSNID:/$FSNAME \
+                       $mnt || return 1
+               #disable FILESET if not supported
+               do_nodes $clients lctl get_param -n \
+                       mdc.$FSNAME-MDT0000*.import | grep -q subtree ||
+                               device=$MGSNID:/$FSNAME
+               do_nodes $clients mkdir -p $mnt/$FILESET
+               do_nodes $clients "! grep -q $mnt' ' /proc/mounts ||
+                       umount $mnt"
+       fi
+
+       do_nodes $clients "
 running=\\\$(mount | grep -c $mnt' ');
 rc=0;
 if [ \\\$running -eq 0 ] ; then
@@ -1614,12 +1657,12 @@ if [ \\\$running -eq 0 ] ; then
 fi;
 exit \\\$rc" || return ${PIPESTATUS[0]}
 
-    echo "Started clients $clients: "
-    do_nodes $clients "mount | grep $mnt' '"
+       echo "Started clients $clients: "
+       do_nodes $clients "mount | grep $mnt' '"
 
-    set_default_debug_nodes $clients
+       set_default_debug_nodes $clients
 
-    return 0
+       return 0
 }
 
 zconf_umount_clients() {
@@ -4959,6 +5002,10 @@ run_one() {
        local SAVE_UMASK=`umask`
        umask 0022
 
+       if ! grep -q $DIR /proc/mounts; then
+               $SETUP
+       fi
+
        banner "test $testnum: $message"
        test_${testnum} || error "test_$testnum failed with $?"
        cd $SAVE_PWD
@@ -4974,6 +5021,7 @@ run_one() {
        unset tdir
        unset tfile
        umask $SAVE_UMASK
+       $CLEANUP
        return 0
 }