Whamcloud - gitweb
LU-6586 mgs: deactive MDT permanently
[fs/lustre-release.git] / lustre / tests / conf-sanity.sh
index 11dc37f..e9252f7 100644 (file)
@@ -78,8 +78,8 @@ if [[ "$LDISKFS_MKFS_OPTS" != *lazy_itable_init* ]]; then
 fi
 
 [ $(facet_fstype $SINGLEMDS) = "zfs" ] &&
-# bug number for skipped test:        LU-2778 LU-4444
-       ALWAYS_EXCEPT="$ALWAYS_EXCEPT 57b     69"
+# bug number for skipped test:        LU-4444
+       ALWAYS_EXCEPT="$ALWAYS_EXCEPT 69"
 
 init_logging
 
@@ -321,7 +321,7 @@ test_1() {
 run_test 1 "start up ost twice (should return errors)"
 
 test_2() {
-       start_mds || error "MDT0 start fail"
+       start_mds || error "MDT start failed"
        echo "start mds second time.."
        start_mds && error "2nd MDT start should fail"
        start_ost || error "OST start failed"
@@ -1643,6 +1643,7 @@ t32_test() {
 
        trap 'trap - RETURN; t32_test_cleanup' RETURN
 
+       load_modules
        mkdir -p $tmp/mnt/lustre || error "mkdir $tmp/mnt/lustre failed"
        $r mkdir -p $tmp/mnt/{mdt,ost}
        $r tar xjvf $tarball -S -C $tmp || {
@@ -1893,11 +1894,13 @@ t32_test() {
                }
 
                if [ "$dne_upgrade" != "no" ]; then
-                       $LFS mkdir -i 1 $tmp/mnt/lustre/remote_dir || {
+                       $LFS mkdir -i 1 -c2 $tmp/mnt/lustre/remote_dir || {
                                error_noexit "set remote dir failed"
                                return 1
                        }
 
+                       $LFS setdirstripe -D -c2 $tmp/mnt/lustre/remote_dir
+
                        pushd $tmp/mnt/lustre
                        tar -cf - . --exclude=./remote_dir |
                                tar -xvf - -C remote_dir 1>/dev/null || {
@@ -2090,6 +2093,9 @@ test_32c() {
        [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
        t32_check
        for tarball in $tarballs; do
+               # Do not support 1_8 and 2_1 direct upgrade to DNE2 anymore */
+               echo $tarball | grep "1_8" && continue
+               echo $tarball | grep "2_1" && continue
                dne_upgrade=yes t32_test $tarball writeconf || rc=$?
        done
        return $rc
@@ -3379,6 +3385,52 @@ test_50h() {
 }
 run_test 50h "LU-642: activate deactivated OST"
 
+test_50i() {
+       # prepare MDT/OST, make OSC inactive for OST1
+       [ "$MDSCOUNT" -lt "2" ] && skip_env "$MDSCOUNT < 2, skipping" && return
+
+       [ $(facet_fstype ost1) == zfs ] && import_zpool ost1
+       load_modules
+       do_facet mds2 "$TUNEFS --param mdc.active=0 $(mdsdevname 2)" ||
+               error "tunefs MDT2 failed"
+       start_mds  || error "Unable to start MDT"
+       start_ost  || error "Unable to start OST1"
+       start_ost2 || error "Unable to start OST2"
+       mount_client $MOUNT || error "client start failed"
+
+       mkdir $DIR/$tdir || error "mkdir $DIR/$tdir failed"
+
+       $LCTL conf_param ${FSNAME}-MDT0000.mdc.active=0 &&
+               error "deactive MDC0 succeeds"
+       # activate MDC for MDT2
+       local TEST="$LCTL get_param -n mdc.${FSNAME}-MDT0001-mdc-[!M]*.active"
+       set_conf_param_and_check client                                 \
+               "$TEST" "${FSNAME}-MDT0001.mdc.active" 1 ||
+               error "Unable to activate MDT2"
+
+       $LFS mkdir -i1 $DIR/$tdir/2 || error "mkdir $DIR/$tdir/2 failed"
+       # create some file
+       createmany -o $DIR/$tdir/2/$tfile-%d 1 || error "create files failed"
+
+       rm -rf $DIR/$tdir/2 || error "unlink dir failed"
+
+       # deactivate MDC for MDT2
+       local TEST="$LCTL get_param -n mdc.${FSNAME}-MDT0001-mdc-[!M]*.active"
+       set_conf_param_and_check client                                 \
+               "$TEST" "${FSNAME}-MDT0001.mdc.active" 0 ||
+               error "Unable to deactivate MDT2"
+
+       $LFS mkdir -i1 $DIR/$tdir/2 &&
+               error "mkdir $DIR/$tdir/2 succeeds after deactive MDT"
+
+       # cleanup
+       umount_client $MOUNT || error "Unable to umount client"
+       stop_mds
+       stop_ost
+       stop_ost 2
+}
+run_test 50i "activate deactivated MDT"
+
 test_51() {
        local LOCAL_TIMEOUT=20
 
@@ -3908,20 +3960,19 @@ test_60() { # LU-471
 run_test 60 "check mkfs.lustre --mkfsoptions -E -O options setting"
 
 test_61() { # LU-80
-       local reformat=false
+       local lxattr=false
 
        [ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.1.53) ] ||
                { skip "Need MDS version at least 2.1.53"; return 0; }
 
        if [ $(facet_fstype $SINGLEMDS) == ldiskfs ] &&
-          ! large_xattr_enabled; then
-               reformat=true
-               LDISKFS_MKFS_OPTS+=" -O large_xattr"
+            ! large_xattr_enabled; then
+               lxattr=true
 
                for num in $(seq $MDSCOUNT); do
-                       add mds${num} $(mkfs_opts mds$num $(mdsdevname $num)) \
-                       --reformat $(mdsdevname $num) $(mdsvdevname $num) ||
-                       error "add mds $num failed"
+                       do_facet mds${num} $TUNE2FS -O large_xattr \
+                               $(mdsdevname $num) ||
+                               error "tune2fs on mds $num failed"
                done
        fi
 
@@ -3970,9 +4021,12 @@ test_61() { # LU-80
 
     rm -f $file
     stopall
-       if $reformat; then
-               LDISKFS_MKFS_OPTS=${LDISKFS_MKFS_OPTS% -O large_xattr}
-               reformat
+       if $lxattr; then
+               for num in $(seq $MDSCOUNT); do
+                       do_facet mds${num} $TUNE2FS -O ^large_xattr \
+                               $(mdsdevname $num) ||
+                               error "tune2fs on mds $num failed"
+               done
        fi
 }
 run_test 61 "large xattr"
@@ -3991,10 +4045,10 @@ test_62() {
                { skip "Need MDS version at least 2.2.51"; return 0; }
 
        echo "disable journal for mds"
-       do_facet mds tune2fs -O ^has_journal $mdsdev || error "tune2fs failed"
+       do_facet mds $TUNE2FS -O ^has_journal $mdsdev || error "tune2fs failed"
        start_mds && error "MDT start should fail"
        echo "disable journal for ost"
-       do_facet ost1 tune2fs -O ^has_journal $ostdev || error "tune2fs failed"
+       do_facet ost1 $TUNE2FS -O ^has_journal $ostdev || error "tune2fs failed"
        start_ost && error "OST start should fail"
        cleanup || error "cleanup failed with rc $?"
        reformat_and_config
@@ -4264,15 +4318,13 @@ test_69() {
        # use OST0000 since it probably has the most creations
        local OSTNAME=$(ostname_from_index 0)
        local mdtosc_proc1=$(get_mdtosc_proc_path mds1 $OSTNAME)
-       local last_id=$(do_facet mds1 $LCTL get_param -n \
-                       osc.$mdtosc_proc1.prealloc_last_id)
 
        # Want to have OST LAST_ID over 1.5 * OST_MAX_PRECREATE to
        # verify that the LAST_ID recovery is working properly.  If
        # not, then the OST will refuse to allow the MDS connect
        # because the LAST_ID value is too different from the MDS
        #define OST_MAX_PRECREATE=20000
-       local num_create=$((20000 * 5))
+       local num_create=$((20000 * 3))
 
        mkdir $DIR/$tdir || error "mkdir $DIR/$tdir failed"
        $SETSTRIPE -i 0 $DIR/$tdir || error "$SETSTRIPE -i 0 $DIR/$tdir failed"
@@ -4282,6 +4334,7 @@ test_69() {
        # filesystem is not inconsistent later on
        $LFS find $MOUNT --ost 0 | xargs rm
 
+       umount_client $MOUNT || error "umount client failed"
        stop_ost || error "OST0 stop failure"
        add ost1 $(mkfs_opts ost1 $(ostdevname 1)) --reformat --replace \
                $(ostdevname 1) $(ostvdevname 1) ||
@@ -4289,6 +4342,7 @@ test_69() {
        start_ost || error "OST0 restart failure"
        wait_osc_import_state mds ost FULL
 
+       mount_client $MOUNT || error "mount client failed"
        touch $DIR/$tdir/$tfile-last || error "create file after reformat"
        local idx=$($GETSTRIPE -i $DIR/$tdir/$tfile-last)
        [ $idx -ne 0 ] && error "$DIR/$tdir/$tfile-last on $idx not 0" || true
@@ -4950,7 +5004,7 @@ test_80() {
 }
 run_test 80 "mgc import reconnect race"
 
-# Save the original values of $OSTCOUNT and $OSTINDEX$i.
+#Save the original values of $OSTCOUNT and $OSTINDEX$i.
 save_ostindex() {
        local new_ostcount=$1
        saved_ostcount=$OSTCOUNT
@@ -5391,6 +5445,136 @@ test_84() {
 }
 run_test 84 "check recovery_hard_time"
 
+test_85() {
+       [[ $(lustre_version_code ost1) -ge $(version_code 2.7.55) ]] ||
+               { skip "Need OST version at least 2.7.55" && return 0; }
+##define OBD_FAIL_OSD_OST_EA_FID_SET 0x197
+       do_facet ost1 "lctl set_param fail_loc=0x197"
+       start_ost
+       stop_ost
+}
+run_test 85 "osd_ost init: fail ea_fid_set"
+
+test_86() {
+       [ "$(facet_fstype ost1)" = "zfs" ] &&
+               skip "LU-6442: no such mkfs params for ZFS OSTs" && return
+
+       local OST_OPTS="$(mkfs_opts ost1 $(ostdevname 1)) \
+               --reformat $(ostdevname 1) $(ostvdevname 1)"
+
+       local NEWSIZE=1024
+       local OLDSIZE=$(do_facet ost1 "$DEBUGFS -c -R stats $(ostdevname 1)" |
+               awk '/Flex block group size: / { print $NF; exit; }')
+
+       local opts=OST_OPTS
+       if [[ ${!opts} != *mkfsoptions* ]]; then
+               eval opts=\"${!opts} \
+                       --mkfsoptions='\\\"-O flex_bg -G $NEWSIZE\\\"'\"
+       else
+               val=${!opts//--mkfsoptions=\\\"/ \
+                       --mkfsoptions=\\\"-O flex_bg -G $NEWSIZE }
+               eval opts='${val}'
+       fi
+
+       echo "params: $opts"
+
+       add ost1 $opts || error "add ost1 failed with new params"
+
+       local FOUNDSIZE=$(do_facet ost1 "$DEBUGFS -c -R stats $(ostdevname 1)" |
+               awk '/Flex block group size: / { print $NF; exit; }')
+
+       [[ $FOUNDSIZE == $NEWSIZE ]] ||
+               error "Flex block group size: $FOUNDSIZE, expected: $NEWSIZE"
+       return 0
+}
+run_test 86 "Replacing mkfs.lustre -G option"
+
+test_87() { #LU-6544
+       [[ $(lustre_version_code $SINGLEMDS1) -ge $(version_code 2.7.56) ]] ||
+               { skip "Need MDS version at least 2.7.56" && return; }
+       [[ $(facet_fstype $SINGLEMDS) != ldiskfs ]] &&
+               { skip "Only applicable to ldiskfs-based MDTs" && return; }
+       [[ $OSTCOUNT -gt 69 ]] &&
+               { skip "Ignore wide striping situation" && return; }
+
+       local mdsdev=$(mdsdevname 1)
+       local mdsvdev=$(mdsvdevname 1)
+       local file=$DIR/$tfile
+       local mntpt=$(facet_mntpt $SINGLEMDS)
+       local used_xattr_blk=0
+       local inode_size=${1:-512}
+       local left_size=0
+       local xtest="trusted.test"
+       local value
+       local orig
+       local i
+
+       #Please see LU-6544 for MDT inode size calculation
+       if [ $OSTCOUNT -gt 26 ]; then
+               inode_size=2048
+       elif [ $OSTCOUNT -gt 5 ]; then
+               inode_size=1024
+       fi
+       left_size=$(expr $inode_size - \
+                       156 - \
+                       32 - \
+                       32 - $OSTCOUNT \* 24 - 16 - 3 -  \
+                       24 - 16 - 3 - \
+                       24 - 18 - $(expr length $tfile) - 16 - 4)
+       if [ $left_size -le 0 ]; then
+               echo "No space($left_size) is expected in inode."
+               echo "Try 1-byte xattr instead to verify this."
+               left_size=1
+       else
+               echo "Estimate: at most $left_size-byte space left in inode."
+       fi
+
+       unload_modules
+       reformat
+
+       add mds1 $(mkfs_opts mds1 ${mdsdev}) --stripe-count-hint=$OSTCOUNT \
+               --reformat $mdsdev $mdsvdev || error "add mds1 failed"
+       start_mdt 1 > /dev/null || error "start mdt1 failed"
+       for i in $(seq $OSTCOUNT); do
+               start ost$i $(ostdevname $i) $OST_MOUNT_OPTS > /dev/null ||
+                       error "start ost$i failed"
+       done
+       mount_client $MOUNT > /dev/null || error "mount client $MOUNT failed"
+       check_mount || error "check client $MOUNT failed"
+
+       #set xattr
+       $SETSTRIPE -c -1 $file || error "$SETSTRIPE -c -1 $file failed"
+       $GETSTRIPE $file || error "$GETSTRIPE $file failed"
+       i=$($GETSTRIPE -c $file)
+       if [ $i -ne $OSTCOUNT ]; then
+               left_size=$(expr $left_size + $(expr $OSTCOUNT - $i) \* 24)
+               echo -n "Since only $i out $OSTCOUNT OSTs are used, "
+               echo -n "the expected left space is changed to "
+               echo "$left_size bytes at most."
+       fi
+       value=$(generate_string $left_size)
+       setfattr -n $xtest -v $value $file
+       orig=$(get_xattr_value $xtest $file)
+       [[ "$orig" != "$value" ]] && error "$xtest changed"
+
+       #Verify if inode has some expected space left
+       umount $MOUNT > /dev/null || error "umount $MOUNT failed"
+       stop_mdt 1 > /dev/null || error "stop mdt1 failed"
+       mount_ldiskfs $SINGLEMDS || error "mount -t ldiskfs $SINGLEMDS failed"
+
+       do_facet $SINGLEMDS ls -sal $mntpt/ROOT/$tfile
+       used_xattr_blk=$(do_facet $SINGLEMDS ls -s $mntpt/ROOT/$tfile |
+                       awk '{ print $1 }')
+       [[ $used_xattr_blk -eq 0 ]] &&
+               error "Please check MDS inode size calculation: \
+                      more than $left_size-byte space left in inode."
+       echo "Verified: at most $left_size-byte space left in inode."
+
+       stopall
+}
+run_test 87 "check if MDT inode can hold EAs with N stripes properly"
+
+
 if ! combined_mgs_mds ; then
        stop mgs
 fi