X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Ftests%2Fsanity-lfsck.sh;h=b5657e6b5af9c0797ad1e6f7c0b4e294b2341ccf;hb=5707f919e41dffe024d5852321e0216eb105e206;hp=4a384b12bab01c662528b86e3c737ad07c29e684;hpb=7fe96c8bb19a17d711770e072c37a20deaef57d0;p=fs%2Flustre-release.git diff --git a/lustre/tests/sanity-lfsck.sh b/lustre/tests/sanity-lfsck.sh index 4a384b1..b5657e6 100644 --- a/lustre/tests/sanity-lfsck.sh +++ b/lustre/tests/sanity-lfsck.sh @@ -17,7 +17,7 @@ init_test_env $@ . ${CONFIG:=$LUSTRE/tests/cfg/$NAME.sh} init_logging -[ $(facet_fstype $SINGLEMDS) != ldiskfs ] && +[ $(facet_fstype $SINGLEMDS) != "ldiskfs" ] && skip "test LFSCK only for ldiskfs" && exit 0 require_dsh_mds || exit 0 @@ -31,9 +31,9 @@ OSTSIZE=100000 check_and_setup_lustre -[[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.2.90) ]] && - skip "Need MDS version at least 2.2.90" && check_and_cleanup_lustre && - exit 0 +[[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.3.60) ]] && + skip "Need MDS version at least 2.3.60" && check_and_cleanup_lustre && + exit 0 build_test_filter @@ -68,10 +68,10 @@ lfsck_prep() { echo "preparing... ${nfiles} * ${ndirs} files will be created." mkdir -p $DIR/$tdir cp $LUSTRE/tests/*.sh $DIR/ - for ((i=0; i<${ndirs}; i++)); do + for ((i = 0; i < ${ndirs}; i++)); do mkdir $DIR/$tdir/d${i} touch $DIR/$tdir/f${i} - for ((j=0; j<${nfiles}; j++)); do + for ((j = 0; j < ${nfiles}; j++)); do touch $DIR/$tdir/d${i}/f${j} done mkdir $DIR/$tdir/e${i} @@ -128,6 +128,21 @@ test_0() { awk '/^updated_phase1/ { print $2 }') [ $repaired -eq 0 ] || error "(10) Expect nothing to be repaired, but got: $repaired" + + local scanned1=$($SHOW_NAMESPACE | awk '/^success_count/ { print $2 }') + $START_NAMESPACE -r || error "(11) Fail to reset LFSCK!" + sleep 3 + + STATUS=$($SHOW_NAMESPACE | awk '/^status/ { print $2 }') + [ "$STATUS" == "completed" ] || + error "(12) Expect 'completed', but got '$STATUS'" + + local scanned2=$($SHOW_NAMESPACE | awk '/^success_count/ { print $2 }') + [ $((scanned1 + 1)) -eq $scanned2 ] || + error "(13) Expect success $((scanned1 + 1)), but got $scanned2" + + echo "stopall, should NOT crash LU-3649" + stopall > /dev/null } run_test 0 "Control LFSCK manually" @@ -284,10 +299,49 @@ test_2b() } run_test 2b "LFSCK can find out and remove invalid linkEA entry" +test_2c() +{ + lfsck_prep 1 1 + echo "start $SINGLEMDS" + start $SINGLEMDS $MDT_DEVNAME $MOUNT_OPTS_SCRUB > /dev/null || + error "(1) Fail to start MDS!" + + mount_client $MOUNT || error "(2) Fail to start client!" + + #define OBD_FAIL_LFSCK_LINKEA_MORE2 0x1605 + do_facet $SINGLEMDS $LCTL set_param fail_loc=0x1605 + touch $DIR/$tdir/dummy + + do_facet $SINGLEMDS $LCTL set_param fail_loc=0 + umount_client $MOUNT + $START_NAMESPACE || error "(3) Fail to start LFSCK for namespace!" + + sleep 3 + local STATUS=$($SHOW_NAMESPACE | awk '/^status/ { print $2 }') + [ "$STATUS" == "completed" ] || + error "(4) Expect 'completed', but got '$STATUS'" + + local repaired=$($SHOW_NAMESPACE | + awk '/^updated_phase2/ { print $2 }') + [ $repaired -eq 1 ] || + error "(5) Fail to repair crashed linkEA: $repaired" + + mount_client $MOUNT || error "(6) Fail to start client!" + + stat $DIR/$tdir/dummy | grep "Links: 1" > /dev/null || + error "(7) Fail to stat $DIR/$tdir/dummy" + + local dummyfid=$($LFS path2fid $DIR/$tdir/dummy) + local dummyname=$($LFS fid2path $DIR $dummyfid) + [ "$dummyname" == "$DIR/$tdir/dummy" ] || + error "(8) Fail to repair linkEA: $dummyfid $dummyname" +} +run_test 2c "LFSCK can find out and remove repeated linkEA entry" + test_4() { lfsck_prep 3 3 - mds_backup_restore || error "(1) Fail to backup/restore!" + mds_backup_restore $SINGLEMDS || error "(1) Fail to backup/restore!" echo "start $SINGLEMDS with disabling OI scrub" start $SINGLEMDS $MDT_DEVNAME $MOUNT_OPTS_NOSCRUB > /dev/null || error "(2) Fail to start MDS!" @@ -338,7 +392,7 @@ run_test 4 "FID-in-dirent can be rebuilt after MDT file-level backup/restore" test_5() { lfsck_prep 1 1 1 - mds_backup_restore 1 || error "(1) Fail to backup/restore!" + mds_backup_restore $SINGLEMDS 1 || error "(1) Fail to backup/restore!" echo "start $SINGLEMDS with disabling OI scrub" start $SINGLEMDS $MDT_DEVNAME $MOUNT_OPTS_NOSCRUB > /dev/null || error "(2) Fail to start MDS!" @@ -547,7 +601,7 @@ test_7b() #define OBD_FAIL_LFSCK_LINKEA_MORE 0x1604 do_facet $SINGLEMDS $LCTL set_param fail_loc=0x1604 - for ((i=0; i<10; i++)); do + for ((i = 0; i < 20; i++)); do touch $DIR/$tdir/dummy${i} done @@ -600,7 +654,7 @@ test_8() #define OBD_FAIL_LFSCK_LINKEA_MORE 0x1604 do_facet $SINGLEMDS $LCTL set_param fail_loc=0x1604 - for ((i=0; i<5; i++)); do + for ((i = 0; i < 5; i++)); do touch $DIR/$tdir/dummy${i} done @@ -790,10 +844,10 @@ test_9b() { echo "Another preparing... 50 * 50 files (with error) will be created." #define OBD_FAIL_LFSCK_LINKEA_MORE 0x1604 do_facet $SINGLEMDS $LCTL set_param fail_loc=0x1604 - for ((i=0; i<50; i++)); do + for ((i = 0; i < 50; i++)); do mkdir -p $DIR/$tdir/d${i} touch $DIR/$tdir/f${i} - for ((j=0; j<50; j++)); do + for ((j = 0; j < 50; j++)); do touch $DIR/$tdir/d${i}/f${j} done done @@ -875,20 +929,20 @@ test_10() #define OBD_FAIL_LFSCK_LINKEA_CRASH 0x1603 do_facet $SINGLEMDS $LCTL set_param fail_loc=0x1603 - for ((i=0; i<1000; i=$((i+2)))); do + for ((i = 0; i < 1000; i = $((i+2)))); do mkdir -p $DIR/$tdir/d${i} touch $DIR/$tdir/f${i} - for ((j=0; j<5; j++)); do + for ((j = 0; j < 5; j++)); do touch $DIR/$tdir/d${i}/f${j} done done #define OBD_FAIL_LFSCK_LINKEA_MORE 0x1604 do_facet $SINGLEMDS $LCTL set_param fail_loc=0x1604 - for ((i=1; i<1000; i=$((i+2)))); do + for ((i = 1; i < 1000; i = $((i+2)))); do mkdir -p $DIR/$tdir/d${i} touch $DIR/$tdir/f${i} - for ((j=0; j<5; j++)); do + for ((j = 0; j < 5; j++)); do touch $DIR/$tdir/d${i}/f${j} done done