Whamcloud - gitweb
LU-3951 lfsck: OST-object inconsistency self detect/repair
[fs/lustre-release.git] / lustre / tests / sanity-scrub.sh
index 4db0e25..fdbd97f 100644 (file)
@@ -42,6 +42,13 @@ check_and_setup_lustre
 [[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.3.90) ]] &&
        ALWAYS_EXCEPT="$ALWAYS_EXCEPT 1a"
 
+[[ $(lustre_version_code $SINGLEMDS) -le $(version_code 2.4.1) ]] &&
+       ALWAYS_EXCEPT="$ALWAYS_EXCEPT 15"
+
+[[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.4.90) ]] &&
+[[ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.4.50) ]] &&
+       ALWAYS_EXCEPT="$ALWAYS_EXCEPT 15"
+
 [[ $(lustre_version_code ost1) -lt $(version_code 2.4.50) ]] &&
        ALWAYS_EXCEPT="$ALWAYS_EXCEPT 11 12 13 14"
 
@@ -178,6 +185,46 @@ scrub_check_flags() {
        done
 }
 
+scrub_check_params() {
+       local error_id=$1
+       local expected=$2
+       local actual
+       local n
+
+       for n in $(seq $MDSCOUNT); do
+               actual=$(do_facet mds$n $LCTL get_param -n \
+                       osd-ldiskfs.$(facet_svc mds$n).oi_scrub |
+                       awk '/^param/ { print $2 }')
+               if [ "$actual" != "$expected" ]; then
+                       error "($error_id) Expected '$expected' on mds$n, but" \
+                              "got '$actual'"
+               fi
+       done
+}
+
+scrub_check_repaired() {
+       local error_id=$1
+       local expected=$2
+       local actual
+       local n
+
+       for n in $(seq $MDSCOUNT); do
+               actual=$(do_facet mds$n $LCTL get_param -n \
+                       osd-ldiskfs.$(facet_svc mds$n).oi_scrub |
+                       awk '/^updated/ { print $2 }')
+
+               if [ $expected -eq 0 -a $actual -ne 0 ]; then
+                       error "($error_id) Expected no repaired on mds$n, but" \
+                              "got '$actual'"
+               fi
+
+               if [ $expected -ne 0 -a $actual -lt $expected ]; then
+                       error "($error_id) Expected '$expected' on mds$n, but" \
+                              "got '$actual'"
+               fi
+       done
+}
+
 scrub_check_data() {
        local error_id=$1
        local n
@@ -495,7 +542,7 @@ test_6() {
 
        local -a position1
        for n in $(seq $MDSCOUNT); do
-               positions1[$n]=$(scrub_status $n |
+               position1[$n]=$(scrub_status $n |
                        awk '/^latest_start_position/ {print $2}')
                if [ ${position0[$n]} -ne ${position1[$n]} ]; then
                        error "(14) Expected position ${position0[$n]}, but" \
@@ -958,6 +1005,50 @@ test_14() {
 }
 run_test 14 "OI scrub can repair objects under lost+found"
 
+test_15() {
+       # skip test_15 for LU-4182
+       [ $MDSCOUNT -ge 2 ] && skip "skip now for >= 2 MDTs" && return
+       scrub_prep 20
+       scrub_backup_restore 1
+       echo "starting MDTs with OI scrub disabled"
+       scrub_start_mds 2 "$MOUNT_OPTS_NOSCRUB"
+       scrub_check_status 3 init
+       scrub_check_flags 4 inconsistent
+
+       # run under dryrun mode
+       scrub_start 5 -n on
+       sleep 3
+       scrub_check_status 6 completed
+       scrub_check_flags 7 inconsistent
+       scrub_check_params 8 dryrun
+       scrub_check_repaired 9 20
+
+       # run under dryrun mode again
+       scrub_start 10 -n on
+       sleep 3
+       scrub_check_status 11 completed
+       scrub_check_flags 12 inconsistent
+       scrub_check_params 13 dryrun
+       scrub_check_repaired 14 20
+
+       # run under normal mode
+       scrub_start 15 -n off
+       sleep 3
+       scrub_check_status 16 completed
+       scrub_check_flags 17 ""
+       scrub_check_params 18 ""
+       scrub_check_repaired 19 20
+
+       # run under normal mode again
+       scrub_start 20 -n off
+       sleep 3
+       scrub_check_status 21 completed
+       scrub_check_flags 22 ""
+       scrub_check_params 23 ""
+       scrub_check_repaired 24 0
+}
+run_test 15 "Dryrun mode OI scrub"
+
 # restore MDS/OST size
 MDSSIZE=${SAVED_MDSSIZE}
 OSTSIZE=${SAVED_OSTSIZE}