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 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
}
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
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
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 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