📄 replay-single.sh
字号:
#!/bin/bashset -e#set -v## This test needs to be run on the client#SAVE_PWD=$PWDLUSTRE=${LUSTRE:-`dirname $0`/..}SETUP=${SETUP:-}CLEANUP=${CLEANUP:-}. $LUSTRE/tests/test-framework.shinit_test_env $@. ${CONFIG:=$LUSTRE/tests/cfg/$NAME.sh}CHECK_GRANT=${CHECK_GRANT:-"yes"}GRANT_CHECK_LIST=${GRANT_CHECK_LIST:-""}# Skip these tests# bug number: ALWAYS_EXCEPT="$REPLAY_SINGLE_EXCEPT"# 63 min 7 min AT AT AT AT"[ "$SLOW" = "no" ] && EXCEPT_SLOW="1 2 3 4 6 6b 12 16 44 44b 65 66 67 68"build_test_filtercleanup_and_setup_lustremkdir -p $DIRrm -rf $DIR/[df][0-9]*test_0() { replay_barrier mds fail mds}run_test 0 "empty replay"test_0b() { # this test attempts to trigger a race in the precreation code, # and must run before any other objects are created on the filesystem fail ost1 createmany -o $DIR/$tfile 20 || return 1 unlinkmany $DIR/$tfile 20 || return 2}run_test 0b "ensure object created after recover exists. (3284)"test_1() { replay_barrier mds mcreate $DIR/$tfile fail mds $CHECKSTAT -t file $DIR/$tfile || return 1 rm $DIR/$tfile}run_test 1 "simple create"test_1a() { do_facet ost1 "sysctl -w lustre.fail_loc=0" rm -fr $DIR/$tfile local old_last_id=`cat $LPROC/obdfilter/*/last_id` touch -o $DIR/$tfile 1 sync local new_last_id=`cat $LPROC/obdfilter/*/last_id` test "$old_last_id" = "$new_last_id" || { echo "OST object create is caused by MDS" return 1 } old_last_id=`cat $LPROC/obdfilter/*/last_id` echo "data" > $DIR/$tfile sync new_last_id=`cat $LPROC/obdfilter/*/last_id` test "$old_last_id" = "$new_last_id "&& { echo "CROW does not work on write" return 1 } rm -fr $DIR/$tfile#define OBD_FAIL_OST_CROW_EIO | OBD_FAIL_ONCE do_facet ost1 "sysctl -w lustre.fail_loc=0x80000801" rm -fr $DIR/1a1 old_last_id=`cat $LPROC/obdfilter/*/last_id` echo "data" > $DIR/1a1 sync new_last_id=`cat $LPROC/obdfilter/*/last_id` test "$old_last_id" = "$new_last_id" || { echo "CROW does work with fail_loc=0x80000801" return 1 } rm -fr $DIR/1a1 do_facet ost1 "sysctl -w lustre.fail_loc=0"}#CROW run_test 1a "CROW object create (check OST last_id)"test_2a() { replay_barrier mds touch $DIR/$tfile fail mds $CHECKSTAT -t file $DIR/$tfile || return 1 rm $DIR/$tfile}run_test 2a "touch"test_2b() { mcreate $DIR/$tfile replay_barrier mds touch $DIR/$tfile fail mds $CHECKSTAT -t file $DIR/$tfile || return 1 rm $DIR/$tfile}run_test 2b "touch"test_3a() { replay_barrier mds mcreate $DIR/$tfile o_directory $DIR/$tfile fail mds $CHECKSTAT -t file $DIR/$tfile || return 2 rm $DIR/$tfile}run_test 3a "replay failed open(O_DIRECTORY)"test_3b() { replay_barrier mds#define OBD_FAIL_MDS_OPEN_PACK | OBD_FAIL_ONCE do_facet mds "sysctl -w lustre.fail_loc=0x80000114" touch $DIR/$tfile do_facet mds "sysctl -w lustre.fail_loc=0" fail mds $CHECKSTAT -t file $DIR/$tfile && return 2 return 0}run_test 3b "replay failed open -ENOMEM"test_3c() { replay_barrier mds#define OBD_FAIL_MDS_ALLOC_OBDO | OBD_FAIL_ONCE do_facet mds "sysctl -w lustre.fail_loc=0x80000128" touch $DIR/$tfile do_facet mds "sysctl -w lustre.fail_loc=0" fail mds $CHECKSTAT -t file $DIR/$tfile && return 2 return 0}run_test 3c "replay failed open -ENOMEM"test_4() { replay_barrier mds for i in `seq 10`; do echo "tag-$i" > $DIR/$tfile-$i done fail mds for i in `seq 10`; do grep -q "tag-$i" $DIR/$tfile-$i || error "$tfile-$i" done }run_test 4 "|x| 10 open(O_CREAT)s"test_4b() { replay_barrier mds rm -rf $DIR/$tfile-* fail mds $CHECKSTAT -t file $DIR/$tfile-* && return 1 || true}run_test 4b "|x| rm 10 files"# The idea is to get past the first block of precreated files on both # osts, and then replay.test_5() { replay_barrier mds for i in `seq 220`; do echo "tag-$i" > $DIR/$tfile-$i done fail mds for i in `seq 220`; do grep -q "tag-$i" $DIR/$tfile-$i || error "f1c-$i" done rm -rf $DIR/$tfile-* sleep 3 # waiting for commitment of removal}run_test 5 "|x| 220 open(O_CREAT)"test_6() { replay_barrier mds mcreate $DIR/$tdir/$tfile fail mds $CHECKSTAT -t dir $DIR/$tdir || return 1 $CHECKSTAT -t file $DIR/$tdir/$tfile || return 2 sleep 2 # waiting for log process thread}run_test 6 "mkdir + contained create"test_6b() { replay_barrier mds rm -rf $DIR/$tdir fail mds $CHECKSTAT -t dir $DIR/$tdir && return 1 || true }run_test 6b "|X| rmdir"test_7() { replay_barrier mds mcreate $DIR/$tdir/$tfile fail mds $CHECKSTAT -t dir $DIR/$tdir || return 1 $CHECKSTAT -t file $DIR/$tdir/$tfile || return 2 rm -fr $DIR/$tdir}run_test 7 "mkdir |X| contained create"test_8() { replay_barrier mds multiop_bg_pause $DIR/$tfile mo_c || return 4 MULTIPID=$! fail mds ls $DIR/$tfile $CHECKSTAT -t file $DIR/$tfile || return 1 kill -USR1 $MULTIPID || return 2 wait $MULTIPID || return 3 rm $DIR/$tfile}run_test 8 "creat open |X| close"test_9() { replay_barrier mds mcreate $DIR/$tfile local old_inum=`ls -i $DIR/$tfile | awk '{print $1}'` fail mds local new_inum=`ls -i $DIR/$tfile | awk '{print $1}'` echo " old_inum == $old_inum, new_inum == $new_inum" if [ $old_inum -eq $new_inum ] ; then echo " old_inum and new_inum match" else echo "!!!! old_inum and new_inum NOT match" return 1 fi rm $DIR/$tfile}run_test 9 "|X| create (same inum/gen)"test_10() { mcreate $DIR/$tfile replay_barrier mds mv $DIR/$tfile $DIR/$tfile-2 rm -f $DIR/$tfile fail mds $CHECKSTAT $DIR/$tfile && return 1 $CHECKSTAT $DIR/$tfile-2 ||return 2 rm $DIR/$tfile-2 return 0}run_test 10 "create |X| rename unlink"test_11() { mcreate $DIR/$tfile echo "old" > $DIR/$tfile mv $DIR/$tfile $DIR/$tfile-2 replay_barrier mds echo "new" > $DIR/$tfile grep new $DIR/$tfile grep old $DIR/$tfile-2 fail mds grep new $DIR/$tfile || return 1 grep old $DIR/$tfile-2 || return 2}run_test 11 "create open write rename |X| create-old-name read"test_12() { mcreate $DIR/$tfile multiop_bg_pause $DIR/$tfile o_tSc || return 3 pid=$! rm -f $DIR/$tfile replay_barrier mds kill -USR1 $pid wait $pid || return 1 fail mds [ -e $DIR/$tfile ] && return 2 return 0}run_test 12 "open, unlink |X| close"# 1777 - replay open after committed chmod that would make# a regular open a failure test_13() { mcreate $DIR/$tfile multiop_bg_pause $DIR/$tfile O_wc || return 3 pid=$! chmod 0 $DIR/$tfile $CHECKSTAT -p 0 $DIR/$tfile replay_barrier mds fail mds kill -USR1 $pid wait $pid || return 1 $CHECKSTAT -s 1 -p 0 $DIR/$tfile || return 2 return 0}run_test 13 "open chmod 0 |x| write close"test_14() { multiop_bg_pause $DIR/$tfile O_tSc || return 4 pid=$! rm -f $DIR/$tfile replay_barrier mds kill -USR1 $pid || return 1 wait $pid || return 2 fail mds [ -e $DIR/$tfile ] && return 3 return 0}run_test 14 "open(O_CREAT), unlink |X| close"test_15() { multiop_bg_pause $DIR/$tfile O_tSc || return 5 pid=$! rm -f $DIR/$tfile replay_barrier mds touch $DIR/g11 || return 1 kill -USR1 $pid wait $pid || return 2 fail mds [ -e $DIR/$tfile ] && return 3 touch $DIR/h11 || return 4 return 0}run_test 15 "open(O_CREAT), unlink |X| touch new, close"test_16() { replay_barrier mds mcreate $DIR/$tfile munlink $DIR/$tfile mcreate $DIR/$tfile-2 fail mds [ -e $DIR/$tfile ] && return 1 [ -e $DIR/$tfile-2 ] || return 2 munlink $DIR/$tfile-2 || return 3}run_test 16 "|X| open(O_CREAT), unlink, touch new, unlink new"test_17() { replay_barrier mds multiop_bg_pause $DIR/$tfile O_c || return 4 pid=$! fail mds kill -USR1 $pid || return 1 wait $pid || return 2 $CHECKSTAT -t file $DIR/$tfile || return 3 rm $DIR/$tfile}run_test 17 "|X| open(O_CREAT), |replay| close"test_18() { replay_barrier mds multiop_bg_pause $DIR/$tfile O_tSc || return 8 pid=$! rm -f $DIR/$tfile touch $DIR/$tfile-2 || return 1 echo "pid: $pid will close" kill -USR1 $pid wait $pid || return 2 fail mds [ -e $DIR/$tfile ] && return 3 [ -e $DIR/$tfile-2 ] || return 4 # this touch frequently fails touch $DIR/$tfile-3 || return 5 munlink $DIR/$tfile-2 || return 6 munlink $DIR/$tfile-3 || return 7 return 0}run_test 18 "|X| open(O_CREAT), unlink, touch new, close, touch, unlink"# bug 1855 (a simpler form of test_11 above)test_19() { replay_barrier mds mcreate $DIR/$tfile echo "old" > $DIR/$tfile mv $DIR/$tfile $DIR/$tfile-2 grep old $DIR/$tfile-2 fail mds grep old $DIR/$tfile-2 || return 2}run_test 19 "|X| mcreate, open, write, rename "test_20() { replay_barrier mds multiop_bg_pause $DIR/$tfile O_tSc || return 3 pid=$! rm -f $DIR/$tfile fail mds kill -USR1 $pid wait $pid || return 1 [ -e $DIR/$tfile ] && return 2 return 0}run_test 20 "|X| open(O_CREAT), unlink, replay, close (test mds_cleanup_orphans)"test_20b() { # bug 10480 BEFOREUSED=`df -P $DIR | tail -1 | awk '{ print $3 }'` dd if=/dev/zero of=$DIR/$tfile bs=4k count=10000 & pid=$! while [ ! -e $DIR/$tfile ] ; do sleep 0.060s # give dd a chance to start done lfs getstripe $DIR/$tfile || return 1 rm -f $DIR/$tfile || return 2 # make it an orphan mds_evict_client df -P $DIR || df -P $DIR || true # reconnect fail mds # start orphan recovery df -P $DIR || df -P $DIR || true # reconnect wait_mds_recovery_done || error "MDS recovery not done" AFTERUSED=`df -P $DIR | tail -1 | awk '{ print $3 }'` log "before $BEFOREUSED, after $AFTERUSED" [ $AFTERUSED -gt $((BEFOREUSED + 20)) ] && \ error "after $AFTERUSED > before $BEFOREUSED" && return 5 return 0}run_test 20b "write, unlink, eviction, replay, (test mds_cleanup_orphans)"test_20c() { # bug 10480 multiop $DIR/$tfile Ow_c & pid=$! # give multiop a chance to open sleep 1 ls -la $DIR/$tfile mds_evict_client df -P $DIR || df -P $DIR || true # reconnect kill -USR1 $pid test -s $DIR/$tfile || error "File was truncated" return 0}run_test 20c "check that client eviction does not affect file content"test_21() { replay_barrier mds multiop_bg_pause $DIR/$tfile O_tSc || return 5 pid=$! rm -f $DIR/$tfile touch $DIR/g11 || return 1 fail mds kill -USR1 $pid wait $pid || return 2 [ -e $DIR/$tfile ] && return 3 touch $DIR/h11 || return 4 return 0}run_test 21 "|X| open(O_CREAT), unlink touch new, replay, close (test mds_cleanup_orphans)"test_22() { multiop_bg_pause $DIR/$tfile O_tSc || return 3 pid=$! replay_barrier mds rm -f $DIR/$tfile fail mds kill -USR1 $pid wait $pid || return 1 [ -e $DIR/$tfile ] && return 2 return 0}run_test 22 "open(O_CREAT), |X| unlink, replay, close (test mds_cleanup_orphans)"test_23() { multiop_bg_pause $DIR/$tfile O_tSc || return 5 pid=$! replay_barrier mds rm -f $DIR/$tfile touch $DIR/g11 || return 1 fail mds kill -USR1 $pid wait $pid || return 2 [ -e $DIR/$tfile ] && return 3 touch $DIR/h11 || return 4 return 0}run_test 23 "open(O_CREAT), |X| unlink touch new, replay, close (test mds_cleanup_orphans)"test_24() { multiop_bg_pause $DIR/$tfile O_tSc || return 3 pid=$! replay_barrier mds fail mds rm -f $DIR/$tfile kill -USR1 $pid wait $pid || return 1 [ -e $DIR/$tfile ] && return 2 return 0}run_test 24 "open(O_CREAT), replay, unlink, close (test mds_cleanup_orphans)"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -