ONLY=${ONLY:-"$*"}
-# bug number for skipped test: LU-2828
-ALWAYS_EXCEPT="$CONF_SANITY_EXCEPT 59 64"
+# bug number for skipped test:
+ALWAYS_EXCEPT="$CONF_SANITY_EXCEPT"
# UPDATE THE COMMENT ABOVE WITH BUG NUMBERS WHEN CHANGING ALWAYS_EXCEPT!
is_sles11() # LU-2181
MDSSIZE=200000
OSTSIZE=200000
+fs2mds_HOST=$mds_HOST
+fs2ost_HOST=$ost_HOST
+fs3ost_HOST=$ost_HOST
+
+MDSDEV1_2=$fs2mds_DEV
+OSTDEV1_2=$fs2ost_DEV
+OSTDEV2_2=$fs3ost_DEV
+
if ! combined_mgs_mds; then
# bug number for skipped test: 23954
ALWAYS_EXCEPT="$ALWAYS_EXCEPT 24b"
cleanup_nocli || return $?
}
+cleanup_fs2() {
+ trap 0
+ echo "umount $MOUNT2 ..."
+ umount $MOUNT2 || true
+ echo "stopping fs2mds ..."
+ stop fs2mds -f || true
+ echo "stopping fs2ost ..."
+ stop fs2ost -f || true
+}
+
check_mount() {
do_facet client "cp /etc/passwd $DIR/a" || return 71
do_facet client "rm $DIR/a" || return 72
run_test 1 "start up ost twice (should return errors)"
test_2() {
- start_mdt 1 || error "MDT0 start fail"
+ start_mds || error "MDT start failed"
echo "start mds second time.."
- start_mdt 1 && error "2nd MDT start should fail"
+ start_mds && error "2nd MDT start should fail"
start_ost || error "OST start failed"
mount_client $MOUNT || error "mount_client failed to start client"
check_mount || error "check_mount failed"
}
run_test 21d "start mgs then ost and then mds"
+cleanup_21e() {
+ MGSNID="$saved_mgsnid"
+ cleanup_fs2
+ echo "stopping fs2mgs ..."
+ stop $fs2mgs -f || true
+}
+
+test_21e() { # LU-5863
+ if [[ -z "$fs3ost_DEV" || -z "$fs2ost_DEV" || -z "$fs2mds_DEV" ]]; then
+ is_blkdev $SINGLEMDS $(mdsdevname ${SINGLEMDS//mds/}) &&
+ skip_env "mixed loopback and real device not working" && return
+ fi
+
+ local fs2mdsdev=$(mdsdevname 1_2)
+ local fs2ostdev=$(ostdevname 1_2)
+ local fs3ostdev=$(ostdevname 2_2)
+
+ local fs2mdsvdev=$(mdsvdevname 1_2)
+ local fs2ostvdev=$(ostvdevname 1_2)
+ local fs3ostvdev=$(ostvdevname 2_2)
+
+ # temporarily use fs3ost as fs2mgs
+ local fs2mgs=fs3ost
+ local fs2mgsdev=$fs3ostdev
+ local fs2mgsvdev=$fs3ostvdev
+
+ local fsname=test1234
+
+ add $fs2mgs $(mkfs_opts mgs $fs2mgsdev) --fsname=$fsname \
+ --reformat $fs2mgsdev $fs2mgsvdev || error "add fs2mgs failed"
+ start $fs2mgs $fs2mgsdev $MGS_MOUNT_OPTS && trap cleanup_21e EXIT INT ||
+ error "start fs2mgs failed"
+
+ local saved_mgsnid="$MGSNID"
+ MGSNID=$(do_facet $fs2mgs $LCTL list_nids | xargs | tr ' ' ,)
+
+ add fs2mds $(mkfs_opts mds1 $fs2mdsdev $fsname) \
+ --reformat $fs2mdsdev $fs2mdsvdev || error "add fs2mds failed"
+ add fs2ost $(mkfs_opts ost1 $fs2ostdev $fsname) \
+ --reformat $fs2ostdev $fs2ostvdev || error "add fs2ost failed"
+
+ start fs2ost $fs2ostdev $OST_MOUNT_OPTS || error "start fs2ost failed"
+ start fs2mds $fs2mdsdev $MDS_MOUNT_OPTS || error "start fs2mds failed"
+
+ mkdir -p $MOUNT2 || error "mkdir $MOUNT2 failed"
+ $MOUNT_CMD $MGSNID:/$fsname $MOUNT2 || error "mount $MOUNT2 failed"
+ DIR=$MOUNT2 MOUNT=$MOUNT2 check_mount || error "check $MOUNT2 failed"
+
+ cleanup_21e
+}
+run_test 21e "separate MGS and MDS"
+
test_22() {
start_mds || error "MDS start failed"
}
run_test 23b "Simulate -EINTR during mount"
-fs2mds_HOST=$mds_HOST
-fs2ost_HOST=$ost_HOST
-
-MDSDEV1_2=$fs2mds_DEV
-OSTDEV1_2=$fs2ost_DEV
-OSTDEV2_2=$fs3ost_DEV
-
-cleanup_fs2() {
- trap 0
- echo "umount $MOUNT2 ..."
- umount $MOUNT2 || true
- echo "stopping fs2mds ..."
- stop fs2mds -f || true
- echo "stopping fs2ost ..."
- stop fs2ost -f || true
-}
-
test_24a() {
local MDSDEV=$(mdsdevname ${SINGLEMDS//mds/})
# Check 3.
# prepare a non-symlink parameter in the OSD
- name="lma_self_repair"
+ name="auto_scrub"
param="$device.osd.$name"
cmd="$LCTL get_param -n osd-*.$device.$name"
done
echo "waiting for dev on $node: dev $devices loop $loops given up"
do_rpc_nodes $node "losetup -a"
- do_rpc_nodes $node "$LCTL devices_list"
+ do_rpc_nodes $node "$LCTL device_list"
return 1
}
echo " Commit: $img_commit"
echo " Kernel: $img_kernel"
echo " Arch: $img_arch"
- echo "OST version: $(get_lustre_version ost1)"
+ echo "OST version: $(lustre_build_version ost1)"
# The conversion can be made only when both of the following
# conditions are satisfied:
error_noexit "Setting \"lov.stripesize\""
return 1
}
+ $r $LCTL conf_param $fsname-MDT0000.mdd.atime_diff=70 || {
+ error_noexit "Setting \"mdd.atime_diff\""
+ return 1
+ }
if [ "$ff_convert" != "no" -a $(facet_fstype ost1) == "ldiskfs" ]; then
$r $LCTL lfsck_start -M $fsname-OST0000 || {
local rc=0
local FSNAME2=test1234
- local fs3ost_HOST=$ost_HOST
local MDSDEV=$(mdsdevname ${SINGLEMDS//mds/})
[ -n "$ost1_HOST" ] && fs2ost_HOST=$ost1_HOST && fs3ost_HOST=$ost1_HOST
local MDSDEV=$(mdsdevname ${SINGLEMDS//mds/})
- start $SINGLEMDS $MDSDEV $MDS_MOUNT_OPTS -o nosvc -n
+ start_mdt 1 -o nosvc -n
+ if [ $MDSCOUNT -ge 2 ]; then
+ for num in $(seq 2 $MDSCOUNT); do
+ start_mdt $num || return
+ done
+ fi
start ost1 $(ostdevname 1) $OST_MOUNT_OPTS
- start $SINGLEMDS $MDSDEV $MDS_MOUNT_OPTS -o nomgs,force
+ start_mdt 1 -o nomgs,force
mount_client $MOUNT || error "mount_client $MOUNT failed"
sleep 5
reformat
local MDSDEV=$(mdsdevname ${SINGLEMDS//mds/})
- start $SINGLEMDS $MDSDEV $MDS_MOUNT_OPTS -o nosvc -n
+ start_mdt 1 -o nosvc -n
+ if [ $MDSCOUNT -ge 2 ]; then
+ for num in $(seq 2 $MDSCOUNT); do
+ start_mdt $num || return
+ done
+ fi
start_ost || error "Unable to start OST1"
- start $SINGLEMDS $MDSDEV $MDS_MOUNT_OPTS -o nomgs,force
+ start_mdt 1 -o nomgs,force
mount_client $MOUNT || error "mount_client $MOUNT failed"
sleep 5
{ skip "Need MDS version 2.5.4+ or 2.5.26+ or 2.6.52+"; return; }
cleanup
- # MDT concurent start
+ # MDT concurrent start
#define OBD_FAIL_TGT_DELAY_CONNECT 0x703
do_facet $SINGLEMDS "$LCTL set_param fail_loc=0x703"
start mds1 $(mdsdevname 1) $MDS_MOUNT_OPTS &
echo "2nd MDT start succeed"
else
stop mds1 -f
- error "unexpected concurent MDT mounts result, rc=$rc rc2=$rc2"
+ error "unexpected concurrent MDT mounts result, rc=$rc rc2=$rc2"
+ fi
+
+ if [ $MDSCOUNT -ge 2 ]; then
+ for num in $(seq 2 $MDSCOUNT); do
+ start_mdt $num || return
+ done
fi
- # OST concurent start
+ # OST concurrent start
+
#define OBD_FAIL_TGT_DELAY_CONNECT 0x703
do_facet ost1 "$LCTL set_param fail_loc=0x703"
start ost1 $(ostdevname 1) $OST_MOUNT_OPTS &
echo "1st OST start failed with EALREADY"
echo "2nd OST start succeed"
else
- stop mds1 -f
+ stop_mds -f
stop ost1 -f
- error "unexpected concurent OST mounts result, rc=$rc rc2=$rc2"
+ error "unexpected concurrent OST mounts result, rc=$rc rc2=$rc2"
fi
# cleanup
- stop mds1 -f
+ stop_mds
stop ost1 -f
# verify everything ok
start_mds
if [ $? != 0 ]
then
- stop mds1 -f
+ stop_mds
error "MDT(s) start failed"
fi
start_ost
if [ $? != 0 ]
then
- stop mds1 -f
+ stop_mds
stop ost1 -f
error "OST(s) start failed"
fi
mount_client $MOUNT
if [ $? != 0 ]
then
- stop mds1 -f
+ stop_mds
stop ost1 -f
error "client start failed"
fi
check_mount
if [ $? != 0 ]
then
- stop mds1 -f
+ stop_mds
stop ost1 -f
error "client mount failed"
fi
cleanup
}
-run_test 41c "concurent mounts of MDT/OST should all fail but one"
+run_test 41c "concurrent mounts of MDT/OST should all fail but one"
test_42() { #bug 14693
setup
cleanup_48() {
trap 0
- # reformat after this test is needed - if test will failed
+ # reformat after this test is needed - if the test fails,
# we will have unkillable file at FS
reformat_and_config
}
[ $? -eq 0 ] || { error "Unable to move objects"; return 14; }
# recover objects dry-run
- echo "ll_recover_lost_found_objs dry_run"
- do_node $ost1node "ll_recover_lost_found_objs -n -d $ost1mnt/O" ||
- error "ll_recover_lost_found_objs failed"
+ if [ $(lustre_version_code ost1) -ge $(version_code 2.5.56) ]; then
+ echo "ll_recover_lost_found_objs dry_run"
+ do_node $ost1node \
+ "ll_recover_lost_found_objs -n -d $ost1mnt/O" ||
+ error "ll_recover_lost_found_objs failed"
+ fi
# recover objects
echo "ll_recover_lost_found_objs fix run"
run_test 55 "check lov_objid size"
test_56() {
+ local server_version=$(lustre_version_code $SINGLEMDS)
local mds_journal_size_orig=$MDSJOURNALSIZE
local n
mount_client $MOUNT || error "Unable to mount client"
echo ok
$LFS osts
- wait_osc_import_state mds ost1 FULL
- wait_osc_import_state mds ost2 FULL
- $SETSTRIPE --stripe-count=-1 $DIR/$tfile ||
- error "Unable to setstripe $DIR/$tfile"
- n=$($LFS getstripe --stripe-count $DIR/$tfile)
- [ "$n" -eq 2 ] || error "Stripe count not two: $n"
- rm $DIR/$tfile
+
+ if [[ $server_version -ge $(version_code 2.6.54) ]] ||
+ [[ $server_version -ge $(version_code 2.5.4) &&
+ $server_version -lt $(version_code 2.5.11) ]]; then
+ wait_osc_import_state mds ost1 FULL
+ wait_osc_import_state mds ost2 FULL
+ $SETSTRIPE --stripe-count=-1 $DIR/$tfile ||
+ error "Unable to setstripe $DIR/$tfile"
+ n=$($LFS getstripe --stripe-count $DIR/$tfile)
+ [ "$n" -eq 2 ] || error "Stripe count not two: $n"
+ rm $DIR/$tfile
+ fi
+
stopall
MDSJOURNALSIZE=$mds_journal_size_orig
reformat
start_mdt 1 || error "MDT0 start fail"
start_ost || error "OST0 start fail"
-
- start_mdt 2 || error "MDT1 start fail"
+ for num in $(seq 2 $MDSCOUNT); do
+ start_mdt $num || return
+ done
mount_client $MOUNT || error "mount client fails"
start_ost || error "OST0 start fail"
- start_mdt 1 || error "MDT0 start fail"
- start_mdt 2 || error "MDT1 start fail"
+ start_mds || error "MDS start fail"
mount_client $MOUNT || error "mount client fails"
[ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
local MDTIDX=1
- start_mdt 1 || error "MDT0 start fail"
- start_mdt 2 || error "MDT1 start fail"
+ start_mds || error "MDS start fail"
start_ost || error "OST0 start fail"
mount_client $MOUNT || error "mount client fails"
[ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
local MDTIDX=1
- start_mdt 1 || error "MDT0 start fail"
- start_mdt 2 || error "MDT1 start fail"
+ start_mds || error "MDS start fail"
start_ost || error "OST0 start fail"
mount_client $MOUNT || error "mount client fails"
start_mdt 1 || error "MDT0 start fail"
start_ost || error "OST0 start fail"
- start_mdt 2 || error "MDT1 start fail"
+ for num in $(seq 2 $MDSCOUNT); do
+ start_mdt $num || return
+ done
+
start_ost2 || error "OST1 start fail"
mount_client $MOUNT || error "mount client fails"
rm -rf $DIR/$tdir || error "delete dir fail"
umount_client $MOUNT || error "umount_client failed"
- stop_mdt 1 || error "MDT0 stop fail"
- stop_mdt 2 || error "MDT1 stop fail"
+ stop_mds || error "MDS stop fail"
stop_ost || error "OST0 stop fail"
stop_ost2 || error "OST1 stop fail"
}
fi
local MDTIDX=1
- start_mdt 2 || error "MDT1 start fail"
+ for num in $(seq 2 $MDSCOUNT); do
+ start_mdt $num || return
+ done
start_ost || error "OST0 start fail"
start_mdt 1 || error "MDT0 start fail"
start_ost2 || error "OST1 start fail"
rm -rf $DIR/$tdir || error "delete dir fail"
umount_client $MOUNT || error "umount_client failed"
- stop_mdt 1 || error "MDT0 stop fail"
- stop_mdt 2 || error "MDT1 stop fail"
+ stop_mds || error "MDT0 stop fail"
stop_ost || error "OST0 stop fail"
stop_ost2 || error "OST1 stop fail"
}
start_ost || error "OST0 start fail"
start_ost2 || error "OST1 start fail"
- start_mdt 2 || error "MDT1 start fail"
+ for num in $(seq 2 $MDSCOUNT); do
+ start_mdt $num || return
+ done
start_mdt 1 || error "MDT0 start fail"
mount_client $MOUNT || error "mount client fails"
rm -rf $DIR/$tdir || error "delete dir fail"
umount_client $MOUNT || error "umount_client failed"
- stop_mdt 1 || error "MDT0 stop fail"
- stop_mdt 2 || error "MDT1 stop fail"
+ stop_mds || error "MDS stop fail"
stop_ost || error "OST0 stop fail"
stop_ost2 || error "OST1 stop fail"
local MDTIDX=1
start_ost || error "OST0 start fail"
- start_mdt 2 || error "MDT0 start fail"
+ for num in $(seq 2 $MDSCOUNT); do
+ start_mdt $num || return
+ done
start_mdt 1 || error "MDT0 start fail"
start_ost2 || error "OST1 start fail"
rm -rf $DIR/$tdir || error "delete dir fail"
umount_client $MOUNT || error "umount_client failed"
- stop_mdt 1 || error "MDT0 stop fail"
- stop_mdt 2 || error "MDT1 stop fail"
+ stop_mds || error "MDS stop fail"
stop_ost || error "OST0 stop fail"
stop_ost2 || error "OST1 stop fail"
local MDTIDX=1
start_ost || error "OST0 start fail"
- start_mdt 2 || error "MDT1 start fail"
+ for num in $(seq 2 $MDSCOUNT); do
+ start_mdt $num || return
+ done
start_ost2 || error "OST1 start fail"
start_mdt 1 || error "MDT0 start fail"
rm -rf $DIR/$tdir || error "delete dir fail"
umount_client $MOUNT || error "umount_client failed"
- stop_mdt 1 || error "MDT0 stop fail"
- stop_mdt 2 || error "MDT1 stop fail"
+ stop_mds || error "MDS stop fail"
stop_ost || error "OST0 stop fail"
stop_ost2 || error "OST1 stop fail"
add mds${num} $(mkfs_opts mds$num $(mdsdevname $num)) \
--reformat $(mdsdevname $num) $(mdsvdevname $num) ||
error "add mds $num failed"
- $TUNE2FS -O extents $(mdsdevname $num)
+ do_facet mds${num} "$TUNE2FS -O extents $(mdsdevname $num)" ||
+ error "$TUNE2FS failed on mds${num}"
done
add ost1 $(mkfs_opts ost1 $ostdev) --reformat $ostdev ||
add ost1 $opts_ost1 $ostdev1 $ostvdev2 &&
error "Must specify --mgsnode when formatting an ost"
- return 0
+ reformat
}
run_test 79 "format MDT/OST without mgs option (should return errors)"
test_80() {
- start_mds
- start_ost
+ start_mds || error "Failed to start MDT"
+ start_ost || error "Failed to start OST1"
uuid=$(do_facet ost1 $LCTL get_param -n mgc.*.uuid)
#define OBD_FAIL_MGS_PAUSE_TARGET_CON 0x906
do_facet ost1 "$LCTL set_param fail_val=10 fail_loc=0x906"
do_facet mgs "$LCTL set_param fail_val=10 fail_loc=0x906"
do_facet mgs "$LCTL set_param -n mgs/MGS/evict_client $uuid"
sleep 30
- start_ost2
+ start_ost2 || error "Failed to start OST2"
do_facet ost1 "$LCTL set_param fail_loc=0"
stopall
run_test 82b "specify OSTs for file with --pool and --ost-list options"
test_83() {
- local dev
- local ostmnt
- local fstype
- local mnt_opts
-
+ [[ $(lustre_version_code ost1) -ge $(version_code 2.6.91) ]] ||
+ { skip "Need OST version at least 2.6.91" && return 0; }
if [ $(facet_fstype $SINGLEMDS) != ldiskfs ]; then
skip "Only applicable to ldiskfs-based MDTs"
return
fi
+ local dev
+ local ostmnt
+ local fstype
+ local mnt_opts
+
dev=$(ostdevname 1)
ostmnt=$(facet_mntpt ost1)
fstype=$(facet_fstype ost1)
run_test 83 "ENOSPACE on OST doesn't cause message VFS: \
Busy inodes after unmount ..."
+recovery_time_min() {
+ local CONNECTION_SWITCH_MIN=5
+ local CONNECTION_SWITCH_INC=5
+ local CONNECTION_SWITCH_MAX
+ local RECONNECT_DELAY_MAX
+ local INITIAL_CONNECT_TIMEOUT
+ local max
+ local TO_20
+
+ #CONNECTION_SWITCH_MAX=min(50, max($CONNECTION_SWITCH_MIN,$TIMEOUT)
+ (($CONNECTION_SWITCH_MIN>$TIMEOUT)) && \
+ max=$CONNECTION_SWITCH_MIN || max=$TIMEOUT
+ (($max<50)) && CONNECTION_SWITCH_MAX=$max || CONNECTION_SWITCH_MAX=50
+
+ #INITIAL_CONNECT_TIMEOUT = max(CONNECTION_SWITCH_MIN, \
+ #obd_timeout/20)
+ TO_20=$(($TIMEOUT/20))
+ (($CONNECTION_SWITCH_MIN>$TO_20)) && \
+ INITIAL_CONNECT_TIMEOUT=$CONNECTION_SWITCH_MIN || \
+ INITIAL_CONNECT_TIMEOUT=$TO_20
+
+ RECONNECT_DELAY_MAX=$(($CONNECTION_SWITCH_MAX+$CONNECTION_SWITCH_INC+ \
+ $INITIAL_CONNECT_TIMEOUT))
+ echo $((2*$RECONNECT_DELAY_MAX))
+}
+
+test_84() {
+ local facet=$SINGLEMDS
+ local num=$(echo $facet | tr -d "mds")
+ local dev=$(mdsdevname $num)
+ local time_min=$(recovery_time_min)
+ local recovery_duration
+ local completed_clients
+ local wrap_up=5
+
+ echo "start mds service on $(facet_active_host $facet)"
+ start $facet ${dev} $MDS_MOUNT_OPTS \
+ "-o recovery_time_hard=$time_min,recovery_time_soft=$time_min" $@ ||
+ error "start MDS failed"
+
+ start_ost
+ start_ost2
+
+ echo "recovery_time=$time_min, timeout=$TIMEOUT, wrap_up=$wrap_up"
+
+ mount_client $MOUNT1 || error "mount failed"
+ mount_client $MOUNT2 || error "mount failed"
+
+ replay_barrier $SINGLEMDS
+ createmany -o $DIR1/$tfile-%d 1000
+
+ # We need to catch the end of recovery window to extend it.
+ # Skip 5 requests and add delay to request handling.
+ #define OBD_FAIL_TGT_REPLAY_DELAY 0x709 | FAIL_SKIP
+ do_facet $SINGLEMDS "lctl set_param fail_loc=0x20000709 fail_val=5"
+
+ facet_failover $SINGLEMDS || error "failover: $?"
+ client_up
+
+ echo "recovery status"
+ do_facet $SINGLEMDS \
+ "$LCTL get_param -n mdt.$FSNAME-MDT0000.recovery_status"
+
+ recovery_duration=$(do_facet $SINGLEMDS \
+ "$LCTL get_param -n mdt.$FSNAME-MDT0000.recovery_status" |
+ awk '/recovery_duration/ { print $2 }')
+ (( $recovery_duration > $time_min + $wrap_up )) &&
+ error "recovery_duration > recovery_time_hard + wrap up"
+ completed_clients=$(do_facet $SINGLEMDS \
+ "$LCTL get_param -n mdt.$FSNAME-MDT0000.recovery_status" |
+ awk '/completed_clients/ { print $2 }')
+ [ "$completed_clients" = "1/2" ] ||
+ error "completed_clients != 1/2: $completed_clients"
+
+ do_facet $SINGLEMDS "lctl set_param fail_loc=0"
+ umount_client $MOUNT1
+ umount_client $MOUNT2
+
+ stop_ost
+ stop_ost2
+ stop_mds
+}
+run_test 84 "check recovery_hard_time"
+
if ! combined_mgs_mds ; then
stop mgs
fi