set -e
-# bug 5494 5493 LU2034
-ALWAYS_EXCEPT="24 52 60 $RECOVERY_SMALL_EXCEPT"
+# bug 5493 LU2034
+ALWAYS_EXCEPT="52 60 $RECOVERY_SMALL_EXCEPT"
export MULTIOP=${MULTIOP:-multiop}
PTLDEBUG=${PTLDEBUG:--1}
check_and_setup_lustre
assert_DIR
-rm -rf $DIR/[df][0-9]*
+rm -rf $DIR/d[0-9]* $DIR/f.${TESTSUITE}*
test_1() {
local f1="$DIR/$tfile"
#bug 1521
test_10() {
- do_facet client mcreate $DIR/$tfile || return 1
- drop_bl_callback "chmod 0777 $DIR/$tfile" || echo "evicted as expected"
- # wait for the mds to evict the client
- #echo "sleep $(($TIMEOUT*2))"
- #sleep $(($TIMEOUT*2))
- do_facet client touch $DIR/$tfile || echo "touch failed, evicted"
- do_facet client checkstat -v -p 0777 $DIR/$tfile || return 3
- do_facet client "munlink $DIR/$tfile"
+ do_facet client mcreate $DIR/$tfile ||
+ { error "mcreate failed: $?"; return 1; }
+ drop_bl_callback "chmod 0777 $DIR/$tfile" || echo "evicted as expected"
+ # wait for the mds to evict the client
+ #echo "sleep $(($TIMEOUT*2))"
+ #sleep $(($TIMEOUT*2))
+ do_facet client touch $DIR/$tfile || echo "touch failed, evicted"
+ do_facet client checkstat -v -p 0777 $DIR/$tfile ||
+ { error "client checkstat failed: $?"; return 3; }
+ do_facet client "munlink $DIR/$tfile"
+ # allow recovery to complete
+ client_up || client_up || sleep $TIMEOUT
}
run_test 10 "finish request on server after client eviction (bug 1521)"
#bug 2460
# wake up a thread waiting for completion after eviction
test_11(){
- do_facet client $MULTIOP $DIR/$tfile Ow || return 1
- do_facet client $MULTIOP $DIR/$tfile or || return 2
+ do_facet client $MULTIOP $DIR/$tfile Ow ||
+ { error "multiop write failed: $?"; return 1; }
+ do_facet client $MULTIOP $DIR/$tfile or ||
+ { error "multiop read failed: $?"; return 2; }
- cancel_lru_locks osc
+ cancel_lru_locks osc
- do_facet client $MULTIOP $DIR/$tfile or || return 3
- drop_bl_callback $MULTIOP $DIR/$tfile Ow || echo "evicted as expected"
+ do_facet client $MULTIOP $DIR/$tfile or ||
+ { error "multiop read failed: $?"; return 3; }
+ drop_bl_callback $MULTIOP $DIR/$tfile Ow || echo "evicted as expected"
- do_facet client munlink $DIR/$tfile || return 4
+ do_facet client munlink $DIR/$tfile ||
+ { error "munlink failed: $?"; return 4; }
+ # allow recovery to complete
+ client_up || client_up || sleep $TIMEOUT
}
run_test 11 "wake up a thread waiting for completion after eviction (b=2460)"
#b=2494
test_12(){
- $LCTL mark $MULTIOP $DIR/$tfile OS_c
- do_facet $SINGLEMDS "lctl set_param fail_loc=0x115"
- clear_failloc $SINGLEMDS $((TIMEOUT * 2)) &
- multiop_bg_pause $DIR/$tfile OS_c || return 1
- PID=$!
+ $LCTL mark $MULTIOP $DIR/$tfile OS_c
+ do_facet $SINGLEMDS "lctl set_param fail_loc=0x115"
+ clear_failloc $SINGLEMDS $((TIMEOUT * 2)) &
+ multiop_bg_pause $DIR/$tfile OS_c ||
+ { error "multiop failed: $?"; return 1; }
+ PID=$!
#define OBD_FAIL_MDS_CLOSE_NET 0x115
- kill -USR1 $PID
- echo "waiting for multiop $PID"
- wait $PID || return 2
- do_facet client munlink $DIR/$tfile || return 3
+ kill -USR1 $PID
+ echo "waiting for multiop $PID"
+ wait $PID || { error "wait for multiop faile: $?"; return 2; }
+ do_facet client munlink $DIR/$tfile ||
+ { error "client munlink failed: $?"; return 3; }
+ # allow recovery to complete
+ client_up || client_up || sleep $TIMEOUT
}
run_test 12 "recover from timed out resend in ptlrpcd (b=2494)"
# Bug 113, check that readdir lost recv timeout works.
test_13() {
- mkdir -p $DIR/$tdir || return 1
- touch $DIR/$tdir/newentry || return
+ mkdir -p $DIR/$tdir || { error "mkdir failed: $?"; return 1; }
+ touch $DIR/$tdir/newentry || { error "touch failed: $?"; return 2; }
# OBD_FAIL_MDS_READPAGE_NET|OBD_FAIL_ONCE
- do_facet $SINGLEMDS "lctl set_param fail_loc=0x80000104"
- ls $DIR/$tdir || return 3
- do_facet $SINGLEMDS "lctl set_param fail_loc=0"
- rm -rf $DIR/$tdir || return 4
+ do_facet $SINGLEMDS "lctl set_param fail_loc=0x80000104"
+ ls $DIR/$tdir || { error "ls failed: $?"; return 3; }
+ do_facet $SINGLEMDS "lctl set_param fail_loc=0"
+ rm -rf $DIR/$tdir || { error "remove test dir failed: $?"; return 4; }
}
run_test 13 "mdc_readpage restart test (bug 1138)"
do_facet client "munlink $DIR/$tfile"
# let the client reconnect
- sleep 5
+ client_reconnect
EVICT=$(do_facet client $LCTL get_param mdc.$FSNAME-MDT*.state | \
awk -F"[ [,]" '/EVICTED]$/ { if (mx<$4) {mx=$4;} } END { print mx }')
do_facet client munlink $DIR/$tfile
# let the client reconnect
- sleep 5
+ client_reconnect
EVICT=$(do_facet client $LCTL get_param osc.$FSNAME-OST*.state | \
awk -F"[ [,]" '/EVICTED]$/ { if (mx<$4) {mx=$4;} } END { print mx }')
}
run_test 19b "test expired_lock_main on ost (2867)"
+test_19c() {
+ local BEFORE=`date +%s`
+
+ mount_client $DIR2
+ $LCTL set_param ldlm.namespaces.*.early_lock_cancel=0
+
+ mkdir -p $DIR1/$tfile
+ stat $DIR1/$tfile
+
+#define OBD_FAIL_PTLRPC_CANCEL_RESEND 0x516
+ do_facet mds $LCTL set_param fail_loc=0x80000516
+
+ touch $DIR2/$tfile/file1 &
+ PID1=$!
+ # let touch to get blocked on the server
+ sleep 2
+
+ wait $PID1
+ $LCTL set_param ldlm.namespaces.*.early_lock_cancel=1
+ umount_client $DIR2
+
+ # let the client reconnect
+ sleep 5
+ EVICT=$(do_facet client $LCTL get_param mdc.$FSNAME-MDT*.state |
+ awk -F"[ [,]" '/EVICTED]$/ { if (mx<$4) {mx=$4;} } END { print mx }')
+
+ [ -z "$EVICT" ] || [[ $EVICT -le $BEFORE ]] || error "eviction happened"
+}
+run_test 19c "check reconnect and lock resend do not trigger expired_lock_main"
+
test_20a() { # bug 2983 - ldlm_handle_enqueue cleanup
remote_ost_nodsh && skip "remote OST with nodsh" && return 0
}
run_test 23 "client hang when close a file after mds crash"
-test_24() { # bug 11710 details correct fsync() behavior
+test_24a() { # bug 11710 details correct fsync() behavior
remote_ost_nodsh && skip "remote OST with nodsh" && return 0
mkdir -p $DIR/$tdir
client_reconnect
[ $rc -eq 0 ] && error_ignore 5494 "multiop didn't fail fsync: rc $rc" || true
}
-run_test 24 "fsync error (should return error)"
+run_test 24a "fsync error (should return error)"
wait_client_evicted () {
local facet=$1
local varsvc=${facet}_svc
wait_update $(facet_active_host $facet) \
- "lctl get_param -n *.${!varsvc}.num_exports | cut -d' ' -f2" \
- $((exports - 1)) $3
+ "lctl get_param -n *.${!varsvc}.num_exports | cut -d' ' -f2" \
+ $((exports - 1)) $3
}
+test_24b() {
+ remote_ost_nodsh && skip "remote OST with nodsh" && return 0
+
+ dmesg -c
+ mkdir -p $DIR/$tdir
+ lfs setstripe $DIR/$tdir -s 0 -i 0 -c 1
+ cancel_lru_locks osc
+ multiop_bg_pause $DIR/$tdir/$tfile-1 Ow8192_yc ||
+ error "mulitop Ow8192_yc failed"
+
+ MULTI_PID1=$!
+ multiop_bg_pause $DIR/$tdir/$tfile-2 Ow8192_c ||
+ error "mulitop Ow8192_c failed"
+
+ MULTI_PID2=$!
+ ost_evict_client
+
+ kill -USR1 $MULTI_PID1
+ wait $MULTI_PID1
+ rc1=$?
+ kill -USR1 $MULTI_PID2
+ wait $MULTI_PID2
+ rc2=$?
+ lctl set_param fail_loc=0x0
+ client_reconnect
+ [ $rc1 -eq 0 -o $rc2 -eq 0 ] &&
+ error_ignore "multiop didn't fail fsync: $rc1 or close: $rc2" || true
+
+ dmesg | grep "dirty page discard:" || \
+ error "no discarded dirty page found!"
+}
+run_test 24b "test dirty page discard due to client eviction"
+
test_26a() { # was test_26 bug 5921 - evict dead exports by pinger
# this test can only run from a client on a separate node.
remote_ost || { skip "local OST" && return 0; }
SEQ="1 5 10 $(seq $TIMEOUT 5 $(($TIMEOUT+10)))"
echo will failover at $SEQ
for i in $SEQ
- do
- echo failover in $i sec
- sleep $i
- facet_failover $SINGLEMDS
+ do
+ #echo failover in $i sec
+ log "test_$testnum: failover in $i sec"
+ sleep $i
+ facet_failover $SINGLEMDS
done
# client process should see no problems even though MDS went down
# and recovery was interrupted
}
run_test 106 "lightweight connection support"
+test_107 () {
+ local CLIENT_PID
+ local close_pid
+
+ mkdir -p $DIR/$tdir
+ # OBD_FAIL_MDS_REINT_NET_REP 0x119
+ do_facet $SINGLEMDS lctl set_param fail_loc=0x119
+ multiop $DIR/$tdir D_c &
+ close_pid=$!
+ mkdir $DIR/$tdir/dir_106 &
+ CLIENT_PID=$!
+ do_facet $SINGLEMDS lctl set_param fail_loc=0
+ fail $SINGLEMDS
+
+ wait $CLIENT_PID || rc=$?
+ checkstat -t dir $DIR/$tdir/dir_106 || return 1
+
+ kill -USR1 $close_pid
+ wait $close_pid || return 2
+
+ return $rc
+}
+run_test 107 "drop reint reply, then restart MDT"
complete $SECONDS
check_and_cleanup_lustre
exit_status