Whamcloud - gitweb
LU-15555 tests: fix conf_sanity 110 and 111 70/46570/25
authorElena Gryaznova <elena.gryaznova@hpe.com>
Fri, 31 May 2024 14:10:55 +0000 (17:10 +0300)
committerOleg Drokin <green@whamcloud.com>
Sat, 18 Jan 2025 22:02:09 +0000 (22:02 +0000)
The large_dir option is in the kernel now. This broke conf_sanity
110 and 111. Block size is not set to 1024 and created names
are not enougth to fill two htree levels.

This patch fixes conf_sanity 110 and 111.

Fixes: 8048e216c1 ("LU-1365 tests: LARGEDIR and 3-level htree for local ldiskfs")
Test-Parameters: trivial testlist=conf-sanity mdssizegb=20 env=SLOW=yes,ONLY="110 111",ONLY_REPEAT=10
Change-Id: I4b5c7b68e1afe7f04a3b1d85c11f505ac43cda54
Signed-off-by: Artem Blagodarenko <artem.blagodarenko@hpe.com>
Signed-off-by: Elena Gryaznova <elena.gryaznova@hpe.com>
HPE-bug-id: LUS-10730
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/46570
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Artem Blagodarenko <ablagodarenko@ddn.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/tests/conf-sanity.sh

index 780e4d3..a9f11e8 100755 (executable)
@@ -6,6 +6,8 @@ ONLY=${ONLY:-"$*"}
 
 SRCDIR=$(dirname $0)
 PTLDEBUG=${PTLDEBUG:--1}
+export FORCE_TEST_111=${FORCE_TEST_111:-false}
+
 LUSTRE=${LUSTRE:-$(dirname $0)/..}
 . $LUSTRE/tests/test-framework.sh
 init_test_env "$@"
@@ -14,8 +16,6 @@ init_logging
 #                                  tool to create lustre filesystem images
 ALWAYS_EXCEPT="$CONF_SANITY_EXCEPT 32newtarball"
 
-always_except LU-11915 110
-
 if $SHARED_KEY; then
        always_except LU-9795 84 86 103
 fi
@@ -9559,22 +9559,19 @@ run_test 109b "test lctl clear_conf one config"
 
 test_110()
 {
-       [[ "$mds1_FSTYPE" != ldiskfs ]] &&
+       [[ "$mds1_FSTYPE" == ldiskfs ]] ||
                skip "Only applicable to ldiskfs-based MDTs"
-
-       do_facet $SINGLEMDS $DEBUGFS -w -R supported_features |grep large_dir ||
+       do_facet mds1 $DEBUGFS -w -R supported_features |grep large_dir ||
                skip "large_dir option is not supported on MDS"
-       do_facet ost1 $DEBUGFS -w -R supported_features | grep large_dir ||
-               skip "large_dir option is not supported on OSS"
 
-       stopall # stop all targets before modifying the target counts
+       # stop all targets before modifying the target counts
        local old_mdscount=$MDSCOUNT
        local old_ostcount=$OSTCOUNT
-       local replace=""
-       stack_trap "MDSCOUNT=$old_mdscount OSTCOUNT=$old_ostcount; reformat"
+       stack_trap "MDSCOUNT=$old_mdscount OSTCOUNT=$old_ostcount \
+               reformat_and_config"
        MDSCOUNT=1
        OSTCOUNT=1
-
+       reformat
        # ext4_dir_entry_2 struct size:264
        # dx_root struct size:8
        # dx_node struct size:8
@@ -9585,46 +9582,43 @@ test_110()
        # Entries in leaf: 3
        # For 2 levels limit: 48006
        # For 3 levels limit : 6096762
-       # Create 80000 files to safely exceed 2-level htree limit.
-       CONF_SANITY_110_LINKS=${CONF_SANITY_110_LINKS:-80000}
+       # Create enough files to safely exceed 2-level htree limit.
+       CONF_SANITY_110_LINKS=${CONF_SANITY_110_LINKS:-60000}
 
        # can fit at most 3 filenames per 1KB leaf block, but each
        # leaf/index block will only be 3/4 full before split at each level
        (( MDSSIZE < CONF_SANITY_110_LINKS / 3 * 4/3 * 4/3 )) &&
                CONF_SANITY_110_LINKS=$((MDSSIZE * 3 * 3/4 * 3/4))
 
-       combined_mgs_mds || replace=" --replace "
-       local opts="$(mkfs_opts mds1 $(mdsdevname 1)) \
-                   $replace --reformat $(mdsdevname 1) $(mdsvdevname 1)"
+       local dev=$(mdsdevname 1)
+       local opts="$(mkfs_opts mds1 $dev) --reformat $dev $(mdsvdevname 1)"
+
        if [[ $opts != *large_dir* ]]; then
                if [[ $opts != *mkfsoptions* ]]; then
-                       opts+=" --mkfsoptions=\\\"-O large_dir -b 1024 -i 65536\\\""
+                       opts+=" --mkfsoptions=\\\"-O large_dir\\\""
                else
-                       opts="${opts//--mkfsoptions=\\\"/ \
-                               --mkfsoptions=\\\"-O large_dir -b 1024 -i 65536 }"
+                       if [[ $opts != *-O* ]]; then
+                               opts="${opts//--mkfsoptions=\\\"/ \
+                                       --mkfsoptions=\\\"-O large_dir }"
+                       else
+                               opts="${opts/-O /-O large_dir,}"
+                       fi
                fi
        fi
+
+       if [[ $opts != *mkfsoptions* ]]; then
+               opts+=" --mkfsoptions=\\\"-b 1024 -i 65536\\\""
+       else
+               opts="${opts//--mkfsoptions=\\\"/ \
+                       --mkfsoptions=\\\"-b 1024 -i 65536 }"
+       fi
+
        echo "MDT params: $opts"
        load_modules
        combined_mgs_mds || start_mgs
        add mds1 $opts || error "add mds1 failed with new params"
-       start mds1 $(mdsdevname 1) $MDS_MOUNT_OPTS
-
-       opts="$(mkfs_opts ost1 $(ostdevname 1)) \
-               $replace --reformat $(ostdevname 1) $(ostvdevname 1)"
-
-       if [[ $opts != *large_dir* ]]; then
-               if [[ $opts != *mkfsoptions* ]]; then
-                       opts+=" --mkfsoptions=\\\"-O large_dir\\\" "
-               else
-                       opts="${opts//--mkfsoptions=\\\"/ \
-                               --mkfsoptions=\\\"-O large_dir }"
-               fi
-       fi
-       echo "OST params: $opts"
-       add ost1 $opts || error "add ost1 failed with new params"
-       start ost1 $(ostdevname 1) $OST_MOUNT_OPTS
-
+       start mds1 $dev $MDS_MOUNT_OPTS || error "start mds1 failed"
+       start ost1 $(ostdevname 1) $OST_MOUNT_OPTS || error "start ost1 failed"
        MOUNT_2=yes mountcli || error "mount clients failed"
 
        mkdir -v $DIR/$tdir || error "cannot create $DIR/$tdir"
@@ -9650,77 +9644,63 @@ test_110()
        echo "waiting for PIDs$pids to complete"
        wait $pids || error "createmany failed after $group groups"
 
-       umount_client $MOUNT2 -f
-       cleanup
+       stopall
 
-       run_e2fsck $(facet_active_host mds1) $(mdsdevname 1) -n
-       MDSCOUNT=$old_mdscount
-       OSTCOUNT=$old_ostcount
+       run_e2fsck $(facet_active_host mds1) $dev -n
 }
 run_test 110 "Adding large_dir with 3-level htree"
 
 test_111() {
-       [[ "$mds1_FSTYPE" != ldiskfs ]] &&
+       [[ "$mds1_FSTYPE" = ldiskfs ]] ||
                skip "Only applicable to ldiskfs-based MDTs"
-
-       is_dm_flakey_dev $SINGLEMDS $(mdsdevname 1) &&
-               skip "This test can not be executed on flakey dev"
-
-       do_facet $SINGLEMDS $DEBUGFS -w -R supported_features |grep large_dir ||
+       do_facet mds1 $DEBUGFS -w -R supported_features |grep large_dir ||
                skip "large_dir option is not supported on MDS"
 
-       do_facet ost1 $DEBUGFS -w -R supported_features | grep large_dir ||
-               skip "large_dir option is not supported on OSS"
-
        # cleanup before changing target counts
-       cleanup
        local old_mdscount=$MDSCOUNT
        local old_ostcount=$OSTCOUNT
        local old_mdssize=$MDSSIZE
-       local replace=""
        stack_trap "MDSSIZE=$old_mdssize MDSCOUNT=$old_mdscount \
-                   OSTCOUNT=$old_ostcount; reformat"
+                   OSTCOUNT=$old_ostcount reformat_and_config"
        MDSCOUNT=1
        OSTCOUNT=1
-       (( MDSSIZE < 2400000 )) && MDSSIZE=2400000 # need at least 2.4GB
+       reformat
+       local min=5000000
+       # cannot enlarge a block device, so skip the test if size not enough
+       local dev=$(mdsdevname 1)
 
-       local mdsdev=$(mdsdevname 1)
-       combined_mgs_mds || replace=" --replace "
-       local opts="$(mkfs_opts mds1 $(mdsdevname 1)) \
-                   $replace --reformat $(mdsdevname 1) $(mdsvdevname 1)"
+       if is_blkdev mds1 $dev; then
+               is_blkdev mds1 $dev $min ||
+                       skip "$dev too small for ${min}kB MDS"
+       fi
+       (( MDSSIZE < min )) && MDSSIZE=$min # need at least 2.4GB
+       local opts="$(mkfs_opts mds1 $dev) --reformat $dev $(mdsvdevname 1)"
        if [[ $opts != *large_dir* ]]; then
                if [[ $opts != *mkfsoptions* ]]; then
-                       opts+=" --mkfsoptions=\\\"-O large_dir -i 1048576 \\\" "
+                       opts+=" --mkfsoptions=\\\"-O large_dir\\\""
                else
-                       opts="${opts//--mkfsoptions=\\\"/ \
-                               --mkfsoptions=\\\"-O large_dir -i 1048576 }"
+                       if [[ $opts != *-O* ]]; then
+                               opts="${opts//--mkfsoptions=\\\"/ \
+                                       --mkfsoptions=\\\"-O large_dir }"
+                       else
+                               opts="${opts/-O /-O large_dir,}"
+                       fi
                fi
        fi
+
        echo "MDT params: $opts"
        load_modules
        combined_mgs_mds || start_mgs
-       __touch_device mds 1
        add mds1 $opts || error "add mds1 failed with new params"
-       start mds1 $(mdsdevname 1) $MDS_MOUNT_OPTS
-
-       opts="$(mkfs_opts ost1 $(ostdevname 1)) \
-               $replace --reformat $(ostdevname 1) $(ostvdevname 1)"
-       if [[ $opts != *large_dir* ]]; then
-               if [[ $opts != *mkfsoptions* ]]; then
-                       opts+=" --mkfsoptions=\\\"-O large_dir \\\""
-               else
-                       opts="${opts//--mkfsoptions=\\\"/ --mkfsoptions=\\\"-O large_dir }"
-               fi
-       fi
-       echo "OST params: $opts"
-       __touch_device ost 1
-       add ost1 $opts || error "add ost1 failed with new params"
-       start ost1 $(ostdevname 1) $OST_MOUNT_OPTS
+       start mds1 $dev $MDS_MOUNT_OPTS ||
+               error "start mds1 failed"
+       start ost1 $(ostdevname 1) $OST_MOUNT_OPTS ||
+               error "start ost1 failed"
 
        MOUNT_2=yes mountcli
        mkdir $DIR/$tdir || error "cannot create $DIR/$tdir"
-       lfs df $DIR/$tdir
-       lfs df -i $DIR/$tdir
+       $LFS df $DIR/$tdir
+       $LFS df -i $DIR/$tdir
 
        local group=0
 
@@ -9760,12 +9740,19 @@ test_111() {
                done
                echo "waiting for PIDs$pids to complete"
                wait $pids || error "createmany failed after $group groups"
+
                dirsize=$(stat -c %s $DIR/$tdir)
                taken=$((SECONDS - start))
                rate=$((dirsize / taken))
                left=$(((dirmax - dirsize) / rate))
                num=$((group * 60000))
                echo "estimate ${left}s left after $num files / ${taken}s"
+               echo "Reached $dirsize of $dirmax directory size"
+               echo "Free space:"
+               $LFS df $DIR/$tdir
+               $LFS df -i $DIR/$tdir
+
+               $FORCE_TEST_111 && continue
                # if the estimated time remaining is too large (it may change
                # over time as the create rate is not constant) then exit
                # without declaring a failure.
@@ -9774,14 +9761,9 @@ test_111() {
 
        umount_client $MOUNT2 -f
        cleanup
-
-       ! (( $needskip )) ||
-               echo "ETA ${left}s after $num files / ${taken}s is too long"
-
-       run_e2fsck $(facet_active_host mds1) $(mdsdevname 1) -n
-       MDSCOUNT=$old_mdscount
-       OSTCOUNT=$old_ostcount
-       MDSSIZE=$old_mdssize
+       ! (( needskip )) ||
+               skip "ETA ${left}s after $num files / ${taken}s is too long"
+       run_e2fsck $(facet_active_host mds1) $dev -n
 }
 run_test 111 "Adding large_dir with over 2GB directory"