# and stop to generate the startup logs.
start_mds
start_ost
- wait_osc_import_state mds ost FULL
+ wait_osc_import_state mds ost FULL
stop_ost
stop_mds
}
}
reformat() {
- formatall
+ formatall
}
start_mgs () {
for num in $(seq $MDSCOUNT); do
start_mdt $num $@ || return 94
done
+ for num in $(seq $MDSCOUNT); do
+ wait_clients_import_state ${CLIENTS:-$HOSTNAME} mds${num} FULL
+ done
}
start_mgsmds() {
}
stop_mgs() {
- echo "stop mgs service on `facet_active_host mgs`"
- # These tests all use non-failover stop
- stop mgs -f || return 97
+ echo "stop mgs service on `facet_active_host mgs`"
+ # These tests all use non-failover stop
+ stop mgs -f || return 97
}
start_ost() {
echo "start ost1 service on `facet_active_host ost1`"
start ost1 $(ostdevname 1) $OST_MOUNT_OPTS $@ || return 95
+ wait_clients_import_state ${CLIENTS:-$HOSTNAME} ost1 FULL
}
stop_ost() {
start_ost2() {
echo "start ost2 service on `facet_active_host ost2`"
start ost2 $(ostdevname 2) $OST_MOUNT_OPTS $@ || return 92
+ wait_clients_import_state ${CLIENTS:-$HOSTNAME} ost2 FULL
}
stop_ost2() {
do_facet client "cp /etc/passwd $DIR/a" || return 71
do_facet client "rm $DIR/a" || return 72
# make sure lustre is actually mounted (touch will block,
- # but grep won't, so do it after)
- do_facet client "grep $MOUNT' ' /proc/mounts > /dev/null" || return 73
+ # but grep won't, so do it after)
+ do_facet client "grep $MOUNT' ' /proc/mounts > /dev/null" || return 73
echo "setup single mount lustre success"
}
local writeconf=$2
local dne_upgrade=${dne_upgrade:-"no"}
local dom_upgrade=${dom_upgrade:-"no"}
+ local project_upgrade=${project_upgrade:-"no"}
local ff_convert=${ff_convert:-"no"}
local shall_cleanup_mdt=false
local shall_cleanup_mdt1=false
error_noexit "import zfs pool failed"
return 1
}
+ elif [ "$project_upgrade" != "no" ]; then
+ ! $r tune2fs -O project $mdt_dev &&
+ error_noexit "enable project on mdt0 failed" &&
+ return 1
+ $mdt2_is_available && ! $r tune2fs "-O project" $mdt2_dev &&
+ error_noexit "enable project on mdt failed" &&
+ return 1
+ ! $r tune2fs -O project $ost_dev &&
+ error_noexit "enable project on mdt failed" &&
+ return 1
fi
$r $LCTL set_param debug="$PTLDEBUG"
return 1
}
+ if [ "$mds1_FSTYPE" == ldiskfs -a \
+ "$project_upgrade" != "no" ]; then
+ ! $LFS project -d -p 1 $tmp/mnt/lustre/* &&
+ error_noexit "set project failed" &&
+ return 1
+ fi
+
[[ $(do_facet mds1 pgrep orph_.*-MDD | wc -l) == 0 ]] ||
error "MDD orphan cleanup thread not quit"
t32_check
for tarball in $tarballs; do
- banner "testing $tarball upgrade with ff convert"
- ff_convert=yes t32_test $tarball || rc=$?
+ banner "testing $tarball upgrade with ff convert and project upgrade"
+ project_upgrade="no"
+ [[ "$MDS1_VERSION" -ge $(version_code 2.13.54) ]] &&
+ [[ "$tarball" =~ "disk2_4-ldiskfs" ]] &&
+ project_upgrade="yes"
+ project_upgrade=$project_upgrade ff_convert=yes t32_test \
+ $tarball || rc=$?
done
return $rc
}
-run_test 32d "convert ff test"
+run_test 32d "convert ff and project quota upgrade test"
test_32e() {
[[ "$MDS1_VERSION" -ge $(version_code 2.10.56) ]] ||
skip "ldiskfs module has not been loaded"
fi
+ if grep -q "CONFIG_DEBUG_LOCK_ALLOC=y" /boot/config-$(uname -r); then
+ skip "test is not compatible with CONFIG_DEBUG_LOCK_ALLOC=y"
+ fi
+
echo "$inode_slab ldiskfs inodes per page"
[ "${inode_slab%.*}" -ge "3" ] && return 0
}
run_test 90b "check max_mod_rpcs_in_flight is enforced after update"
+save_params_90c() {
+ # get max_rpcs_in_flight value
+ mrif_90c=$($LCTL get_param -n \
+ mdc.$FSNAME-MDT0000-mdc-*.max_rpcs_in_flight)
+ echo "max_rpcs_in_flight is $mrif_90c"
+
+ # get max_mod_rpcs_in_flight value
+ mmrif_90c=$($LCTL get_param -n \
+ mdc.$FSNAME-MDT0000-mdc-*.max_mod_rpcs_in_flight)
+ echo "max_mod_rpcs_in_flight is $mmrif_90c"
+
+ # get MDT max_mod_rpcs_per_client value
+ mmrpc_90c=$(do_facet mds1 \
+ cat /sys/module/mdt/parameters/max_mod_rpcs_per_client)
+ echo "max_mod_rpcs_per_client is $mmrpc_90c"
+}
+
+restore_params_90c() {
+ trap 0
+
+ # restore max_rpcs_in_flight value
+ do_facet mgs $LCTL set_param -P \
+ mdc.$FSNAME-MDT0000-mdc-*.max_rpcs_in_flight=$mrif_90c
+
+ # restore max_mod_rpcs_in_flight value
+ do_facet mgs $LCTL set_param -P \
+ mdc.$FSNAME-MDT0000-mdc-*.max_mod_rpcs_in_flight=$mmrif_90c
+
+ # restore MDT max_mod_rpcs_per_client value
+ do_facet mds1 "echo $mmrpc_90c > \
+ /sys/module/mdt/parameters/max_mod_rpcs_per_client"
+}
+
test_90c() {
local tmp
- local mrif
- local mmrpc
setup
skip "Client not able to send multiple modify RPCs in parallel"
fi
- # get max_rpcs_in_flight value
- mrif=$($LCTL get_param -n mdc.$FSNAME-MDT0000-mdc-*.max_rpcs_in_flight)
- echo "max_rpcs_in_flight is $mrif"
-
- # get MDT max_mod_rpcs_per_client
- mmrpc=$(do_facet mds1 \
- cat /sys/module/mdt/parameters/max_mod_rpcs_per_client)
- echo "max_mod_rpcs_per_client is $mmrpc"
+ save_params_90c
+ stack_trap restore_params_90c
# testcase 1
# attempt to set max_mod_rpcs_in_flight to max_rpcs_in_flight value
# prerequisite: set max_mod_rpcs_per_client to max_rpcs_in_flight value
- umount_client $MOUNT
- do_facet mds1 \
- "echo $mrif > /sys/module/mdt/parameters/max_mod_rpcs_per_client"
- mount_client $MOUNT
+ do_facet mds1 "echo $mrif_90c > \
+ /sys/module/mdt/parameters/max_mod_rpcs_per_client"
- $LCTL set_param \
- mdc.$FSNAME-MDT0000-mdc-*.max_mod_rpcs_in_flight=$mrif &&
- error "set max_mod_rpcs_in_flight to $mrif should fail"
+ # if max_mod_rpcs_in_flight is set to be equal to or larger than
+ # max_rpcs_in_flight, then max_rpcs_in_flight will be increased
+ if [[ "$CLIENT_VERSION" -ge $(version_code 2.13.53) ]]; then
+ $LCTL set_param \
+ mdc.$FSNAME-MDT0000-mdc-*.max_mod_rpcs_in_flight=$mrif_90c ||
+ error "set max_mod_rpcs_in_flight to $mrif_90c failed"
+
+ local new_mrif=$($LCTL get_param -n \
+ mdc.$FSNAME-MDT0000-mdc-*.max_rpcs_in_flight)
+ ((new_mrif == mrif_90c + 1)) ||
+ error "max_rpcs_in_flight was not increased"
+ fi
umount_client $MOUNT
- do_facet mds1 \
- "echo $mmrpc > /sys/module/mdt/parameters/max_mod_rpcs_per_client"
+ do_facet mds1 "echo $mmrpc_90c > \
+ /sys/module/mdt/parameters/max_mod_rpcs_per_client"
mount_client $MOUNT
# testcase 2
# attempt to set max_mod_rpcs_in_flight to max_mod_rpcs_per_client+1
# prerequisite: set max_rpcs_in_flight to max_mod_rpcs_per_client+2
$LCTL set_param \
- mdc.$FSNAME-MDT0000-mdc-*.max_rpcs_in_flight=$((mmrpc + 2))
+ mdc.$FSNAME-MDT0000-mdc-*.max_rpcs_in_flight=$((mmrpc_90c + 2))
$LCTL set_param \
- mdc.$FSNAME-MDT0000-mdc-*.max_mod_rpcs_in_flight=$((mmrpc + 1)) &&
- error "set max_mod_rpcs_in_flight to $((mmrpc + 1)) should fail"
+ mdc.$FSNAME-MDT0000-mdc-*.max_mod_rpcs_in_flight=$((mmrpc_90c + 1)) &&
+ error "set max_mod_rpcs_in_flight to $((mmrpc_90c + 1)) should fail"
+
+ # testcase 3
+ # attempt to set max_mod_rpcs_in_flight permanently
+ do_facet mgs $LCTL set_param -P \
+ mdc.$FSNAME-MDT0000-mdc-*.max_rpcs_in_flight=$mrif_90c
+
+ do_facet mgs $LCTL set_param -P \
+ mdc.$FSNAME-MDT0000-mdc-*.max_mod_rpcs_in_flight=$mrif_90c
+
+ remount_client $MOUNT
+
+ wait_update_facet --verbose client "$LCTL get_param -n \
+ mdc.$FSNAME-MDT0000-mdc-*.max_rpcs_in_flight" \
+ "$((mrif_90c + 1))" ||
+ error "expected '$((mrif_90c + 1))' for max_rpcs_in_flight"
+ wait_update_facet --verbose client "$LCTL get_param -n \
+ mdc.$FSNAME-MDT0000-mdc-*.max_mod_rpcs_in_flight" \
+ "$mrif_90c" ||
+ error "expected '$mrif_90c' for max_mod_rpcs_in_flight"
+
+ restore_params_90c
cleanup
}
run_test 90c "check max_mod_rpcs_in_flight update limits"
}
run_test 123ae "llog_cancel can cancel requested record"
+test_123af() { #LU-13609
+ [ "$MGS_VERSION" -ge $(version_code 2.13.54) -a \
+ "$MDS1_VERSION" -ge $(version_code 2.13.54) ] ||
+ skip "Need both MGS and MDS version at least 2.13.54"
+
+ [ -d $MOUNT/.lustre ] || setupall
+ stack_trap "do_facet mds1 $LCTL set_param fail_loc=0" EXIT
+
+ local device
+ local facet
+ local cmd
+ local orig_clist
+ local orig_count
+ local new_clist
+ local new_count
+
+ for device in "MGS" "$FSNAME-MDT0000"; do
+ cmd="--device $device llog_catlist"
+ echo "lctl $cmd ..."
+ if [ "$device" = "MGS" ]; then
+ facet="mgs"
+ else
+ facet="mds1"
+ fi
+ orig_clist=($(do_facet $facet $LCTL $cmd | awk '{ print $2 }'))
+ orig_count=${#orig_clist[@]}
+ echo "orig_clist: ${orig_clist[@]}"
+
+ #define OBD_FAIL_CATLIST 0x131b
+ #fetch to llog records from the second one
+ do_facet $facet $LCTL set_param fail_loc=0x131b fail_val=2
+
+ new_clist=($(do_facet $facet $LCTL $cmd | awk '{ print $2 }'))
+ new_count=${#new_clist[@]}
+ echo "new_clist: ${new_clist[@]}"
+
+ [ $new_count -eq $((orig_count - 1)) ] ||
+ error "$new_count != $orig_count - 1"
+ for i in $(seq 0 $new_count); do
+ j=$((i + 1))
+ [ "${orig_clist[$j]}" = "${new_clist[$i]}" ] ||
+ error "${orig_clist[$j]} != ${new_clist[$i]}"
+ done
+ do_facet mds1 $LCTL set_param fail_loc=0
+ echo "done"
+ done
+}
+run_test 123af "llog_catlist can show all config files correctly"
+
test_123F() {
remote_mgs_nodsh && skip "remote MGS with nodsh"
}
run_test 125 "check l_tunedisk only tunes OSTs and their slave devices"
+test_126() {
+ [[ "$MDS1_VERSION" -ge $(version_code 2.13.52) ]] ||
+ skip "Need MDS version at least 2.13.52"
+
+ cleanup
+ do_rpc_nodes $(facet_active_host $SINGLEMDS) load_module ../libcfs/libcfs/libcfs
+ #define OBD_FAIL_OBD_SETUP 0x60d
+ do_facet mds1 $LCTL set_param fail_loc=0x60d
+ do_rpc_nodes $(facet_active_host $SINGLEMDS) load_modules &
+ for i in {1..40}; do
+ do_facet mds1 lsmod | grep -q osd_$mds1_FSTYPE && break
+ sleep 1
+ done
+ clear_failloc $SINGLEMDS 20 &
+ start mds1 $(mdsdevname 1) $MDS_MOUNT_OPTS
+}
+run_test 126 "mount in parallel shouldn't cause a crash"
+
+test_127() {
+ [[ "$ost1_FSTYPE" == ldiskfs ]] || skip "ldiskfs only test"
+
+ cleanup
+ setup
+ zconf_umount_clients $RCLIENTS $MOUNT
+
+ wait_osp_active ost ${FSNAME}-OST0000 0 1
+ local osc_tgt="$FSNAME-OST0000-osc-$($LFS getname -i $DIR)"
+ local avail1=($($LCTL get_param -n osc.${osc_tgt}.kbytesavail))
+
+ $LFS setstripe -i 0 $DIR/$tfile || error "failed creating $DIR/$tfile"
+ dd if=/dev/zero of=$DIR/$tfile bs=1M oflag=direct || true
+
+ local avail2=($($LCTL get_param -n osc.${osc_tgt}.kbytesavail))
+
+ if ((avail2 * 100 / avail1 > 1)); then
+ lfs df $DIR
+ ls -l $DIR/$tfile
+ error "more than 1% space left: before=$avail1 after=$avail2"
+ fi
+
+ local mbs=$(($(stat -c %s $DIR/$tfile) / (1024 * 1024)))
+
+ dd if=/dev/zero of=$DIR/$tfile bs=1M count=$mbs conv=notrunc \
+ oflag=direct || error "overwrite failed"
+}
+run_test 127 "direct io overwrite on full ost"
+
if ! combined_mgs_mds ; then
stop mgs
fi