Whamcloud - gitweb
LU-8526 tests: ensure all OSTs active for allocations
[fs/lustre-release.git] / lustre / tests / conf-sanity.sh
index 76934d3..2a0dc2d 100755 (executable)
@@ -4,7 +4,7 @@ set -e
 
 ONLY=${ONLY:-"$*"}
 
-# bug number for skipped test:
+# bug number for skipped test:  LU-8972
 ALWAYS_EXCEPT="$CONF_SANITY_EXCEPT"
 # UPDATE THE COMMENT ABOVE WITH BUG NUMBERS WHEN CHANGING ALWAYS_EXCEPT!
 
@@ -455,17 +455,16 @@ run_test 5c "cleanup after failed mount (bug 2712) (should return errs)"
 
 test_5d() {
        grep " $MOUNT " /etc/mtab &&
-               error false "unexpected entry in mtab before mount" && return 10
+               error "unexpected entry in mtab before mount"
 
        start_ost || error "OST start failed"
        start_mds || error "MDS start failed"
-       stop_ost || error "Unable to stop OST1"
+       stop_ost -f || error "Unable to stop OST1"
        mount_client $MOUNT || error "mount_client $MOUNT failed"
        umount_client $MOUNT -f || error "umount_client $MOUNT failed"
        cleanup_nocli || error "cleanup_nocli failed with $?"
-       grep " $MOUNT " /etc/mtab &&
+       ! grep " $MOUNT " /etc/mtab ||
                error "$MOUNT entry in mtab after unmount"
-       pass
 }
 run_test 5d "mount with ost down"
 
@@ -702,7 +701,7 @@ run_test 19a "start/stop MDS without OSTs"
 
 test_19b() {
        start_ost || error "Unable to start OST1"
-       stop_ost || error "Unable to stop OST1"
+       stop_ost -f || error "Unable to stop OST1"
 }
 run_test 19b "start/stop OSTs without MDS"
 
@@ -4490,8 +4489,16 @@ test_63() {
        fi
 
        echo "$inode_slab ldisk inodes per page"
-       [ "$inode_slab" -ge "3" ] ||
-               error "ldisk inode size is too big, $inode_slab objs per page"
+       if [ "$inode_slab" -ge "3" ] ; then
+               # If kmalloc-128 is also 1 per page - this is a debug kernel
+               # and so this is not an error.
+               local kmalloc128=$(do_facet $SINGLEMDS \
+                       "awk '/^(kmalloc|size)-128 / { print \\\$5 }' /proc/slabinfo")
+               # 32 128-byte chunks in 4k
+               [ "$kmalloc128" -eq "32" ] ||
+                       error "ldisk inode size is too big, $inode_slab objs per page"
+       fi
+
        return
 }
 run_test 63 "Verify each page can at least hold 3 ldisk inodes"
@@ -5634,19 +5641,6 @@ test_81() { # LU-4665
 }
 run_test 81 "sparse OST indexing"
 
-# Wait OSTs to be active on both client and MDT side.
-wait_osts_up() {
-       local cmd="$LCTL get_param -n lov.$FSNAME-clilov-*.target_obd |
-               awk 'BEGIN {c = 0} /ACTIVE/{c += 1} END {printf \\\"%d\\\", c}'"
-       wait_update $HOSTNAME "eval $cmd" $OSTCOUNT ||
-               error "wait_update OSTs up on client failed"
-
-       cmd="$LCTL get_param -n lod.$FSNAME-MDT*-*.target_obd | sort -u |
-            awk 'BEGIN {c = 0} /ACTIVE/{c += 1} END {printf \\\"%d\\\", c}'"
-       wait_update_facet $SINGLEMDS "eval $cmd" $OSTCOUNT ||
-               error "wait_update OSTs up on MDT failed"
-}
-
 # Here we exercise the stripe placement functionality on a file system that
 # has formatted the OST with a random index. With the file system the following
 # functionality is tested:
@@ -5831,7 +5825,8 @@ test_82b() { # LU-4665
        wait_update $HOSTNAME "$LCTL get_param -n lov.$FSNAME-*.pools.$TESTNAME|
                               sort -u | tr '\n' ' ' " "$ost_targets_uuid" ||
                                        error "wait_update $ost_pool failed"
-       pool_list $ost_pool || error "list OST pool $ost_pool failed"
+       [[ -z $(list_pool $ost_pool) ]] &&
+                       error "list OST pool $ost_pool failed"
 
        # If [--pool|-p <pool_name>] is set with [--ost-list|-o <ost_indices>],
        # then the OSTs must be the members of the pool.
@@ -6950,6 +6945,8 @@ test_99()
 {
        [[ $(facet_fstype ost1) != ldiskfs ]] &&
                { skip "Only applicable to ldiskfs-based OSTs" && return; }
+       [[ $(lustre_version_code ost1) -ge $(version_code 2.8.57) ]] ||
+               { skip "Need OST version at least 2.8.57" && return 0; }
 
        local ost_opts="$(mkfs_opts ost1 $(ostdevname 1)) \
                --reformat $(ostdevname 1) $(ostvdevname 1)"
@@ -7004,6 +7001,32 @@ test_100() {
 }
 run_test 100 "check lshowmount lists MGS, MDT, OST and 0@lo"
 
+test_101() {
+       local createmany_oid
+       local dev=$FSNAME-OST0000-osc-MDT0000
+       setup
+
+       createmany -o $DIR1/$tfile-%d 50000 &
+       createmany_oid=$!
+       # MDT->OST reconnection causes MDT<->OST last_id synchornisation
+       # via osp_precreate_cleanup_orphans.
+       for ((i = 0; i < 100; i++)); do
+               for ((k = 0; k < 10; k++)); do
+                       do_facet $SINGLEMDS "$LCTL --device $dev deactivate;" \
+                                           "$LCTL --device $dev activate"
+               done
+
+               ls -asl $MOUNT | grep '???' &&
+                       (kill -9 $createmany_oid &>/dev/null; \
+                        error "File hasn't object on OST")
+
+               kill -s 0 $createmany_oid || break
+       done
+       wait $createmany_oid
+       cleanup
+}
+run_test 101 "Race MDT->OST reconnection with create"
+
 if ! combined_mgs_mds ; then
        stop mgs
 fi