X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Ftests%2Fsanity-scrub.sh;h=fa6e04337f3a304b249502656b9537abba4b4715;hb=f37bce8a573dfc5aac1b9f51f4d5c8314ba05d30;hp=8c12490289793b7ca3445843335f9a9388e35679;hpb=e4799a53832bd1278b766ed2e0a261281b10f28c;p=fs%2Flustre-release.git diff --git a/lustre/tests/sanity-scrub.sh b/lustre/tests/sanity-scrub.sh index 8c12490..fa6e043 100644 --- a/lustre/tests/sanity-scrub.sh +++ b/lustre/tests/sanity-scrub.sh @@ -911,6 +911,7 @@ test_9() { sleep $RUN_TIME1 scrub_check_status 6 completed scrub_check_flags 7 "" + # OI scrub should run with limited speed under non-inconsistent case scrub_start 8 -s $BASE_SPEED1 -r @@ -943,16 +944,17 @@ test_9() { done sleep $RUN_TIME2 - # MIN_MARGIN = 0.8 = 8 / 10 + # 30% margin + local MARGIN=3 local MIN_SPEED=$(((PRE_FETCHED + \ BASE_SPEED1 * (RUN_TIME1 - TIME_DIFF) + \ BASE_SPEED2 * (RUN_TIME2 - TIME_DIFF)) / \ - (RUN_TIME1 + RUN_TIME2) * 8 / 10)) + (RUN_TIME1 + RUN_TIME2) * (10 - MARGIN) / 10)) # MAX_MARGIN = 1.2 = 12 / 10 MAX_SPEED=$(((PRE_FETCHED + \ BASE_SPEED1 * (RUN_TIME1 + TIME_DIFF) + \ BASE_SPEED2 * (RUN_TIME2 + TIME_DIFF)) / \ - (RUN_TIME1 + RUN_TIME2) * 12 / 10)) + (RUN_TIME1 + RUN_TIME2) * (10 + MARGIN) / 10)) for n in $(seq $MDSCOUNT); do SPEED=$(scrub_status $n | awk '/^average_speed/ { print $2 }') [ $SPEED -gt $MIN_SPEED ] || @@ -1272,6 +1274,70 @@ test_16() { } run_test 16 "Initial OI scrub can rebuild crashed index objects" +test_17a() { + [ "$mds1_FSTYPE" != "ldiskfs" ] && skip_env "ldiskfs only test" + +#define OBD_FAIL_OSD_OI_ENOSPC 0x19d + do_facet mds1 $LCTL set_param fail_loc=0x8000019d + mkdir $DIR/$tdir && error "mkdir should fail" + stop mds1 + local devname=$(mdsdevname 1) + + stack_trap "start mds1 $devname $MDS_MOUNT_OPTS" EXIT + FSCK_MAX_ERR=0 run_e2fsck $(facet_active_host mds1) $devname -n || + error "e2fsck returned $?" +} +run_test 17a "ENOSPC on OI insert shouldn't leak inodes" + +test_17b() { + [ "$mds1_FSTYPE" != "ldiskfs" ] && skip_env "ldiskfs only test" + +#define OBD_FAIL_OSD_DOTDOT_ENOSPC 0x19e + do_facet mds1 $LCTL set_param fail_loc=0x8000019e + mkdir $DIR/$tdir && error "mkdir should fail" + stop mds1 + local devname=$(mdsdevname 1) + + stack_trap "start mds1 $devname $MDS_MOUNT_OPTS" EXIT + FSCK_MAX_ERR=0 run_e2fsck $(facet_active_host mds1) $devname -n || + error "e2fsck returned $?" +} +run_test 17b "ENOSPC on .. insertion shouldn't leak inodes" + +test_18() { + local n + local fids=() + local opts=$(csa_add "$MOUNT_OPTS_SCRUB" -o resetoi) + + scrub_prep 10 + scrub_start_mds 1 "$MOUNT_OPTS_SCRUB" + mount_client $MOUNT || error "(2) Fail to start client!" + for n in $(seq $MDSCOUNT); do + fids+=($($LFS path2fid $DIR/$tdir/mds$n/test-framework.sh)) + done + cleanup_mount $MOUNT > /dev/null || error "(3) Fail to stop client!" + for n in $(seq $MDSCOUNT); do + stop mds$n > /dev/null || error "(4) Fail to stop MDS$n!" + done + scrub_start_mds 5 "$opts" + do_facet mds1 dmesg | grep "reset Object Index" || + error "(6) reset log not found" + mount_client $MOUNT || error "(7) Fail to start client!" + scrub_check_data 7 + + local fid + local path + for n in $(seq $MDSCOUNT); do + path=$($LFS fid2path $DIR ${fids[$((n - 1))]}) + [ "$path" == "$DIR/$tdir/mds$n/test-framework.sh" ] || + error "path mismatch $path != $DIR/$tdir/mds$n/test-framework.sh" + fid=$($LFS path2fid $DIR/$tdir/mds$n/test-framework.sh) + [ "${fids[$((n - 1))]}" == "$fid" ] || + error "$DIR/$tdir/mds$n/test-framework.sh FID mismatch ${fids[$((n - 1))]} != $fid" + done +} +run_test 18 "test mount -o resetoi to recreate OI files" + # restore MDS/OST size MDSSIZE=${SAVED_MDSSIZE} OSTSIZE=${SAVED_OSTSIZE}