Whamcloud - gitweb
LU-6317 lfsck: NOT count the objects repeatedly 33/13933/4
authorFan Yong <fan.yong@intel.com>
Sun, 7 Dec 2014 04:41:18 +0000 (12:41 +0800)
committerOleg Drokin <oleg.drokin@intel.com>
Wed, 25 Mar 2015 13:04:28 +0000 (13:04 +0000)
The namespace LFSCK uses object-table based iteration plus namespace
based directory traversing to scan the system. So one object will be
returned twice by them. Counting the objects repeatedly will confuse
the users. So the namespace LFSCK should only count the objects that
are scanned via namespace based directory traversing.

Signed-off-by: Fan Yong <fan.yong@intel.com>
Change-Id: I36459743843e1db1e9372d46d3aafddef033d699
Reviewed-on: http://review.whamcloud.com/13933
Reviewed-by: Alex Zhuravlev <alexey.zhuravlev@intel.com>
Reviewed-by: Lai Siyao <lai.siyao@intel.com>
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/lfsck/lfsck_lib.c
lustre/lfsck/lfsck_namespace.c
lustre/tests/sanity-lfsck.sh

index 62b1d8d..02616b7 100644 (file)
@@ -2372,9 +2372,6 @@ int lfsck_checkpoint_generic(const struct lu_env *env,
        struct ptlrpc_thread            *athread = &lad->lad_thread;
        struct l_wait_info               lwi     = { 0 };
 
-       if (com->lc_new_checked == 0)
-               return LFSCK_CHECKPOINT_SKIP;
-
        l_wait_event(mthread->t_ctl_waitq,
                     list_empty(&lad->lad_req_list) ||
                     !thread_is_running(mthread) ||
index bf8dd2f..1598f75 100644 (file)
@@ -4126,7 +4126,6 @@ static int lfsck_namespace_exec_oit(const struct lu_env *env,
 
 out:
        down_write(&com->lc_sem);
-       com->lc_new_checked++;
        if (S_ISDIR(lfsck_object_type(obj)))
                ns->ln_dirs_checked++;
        if (rc != 0)
index e82c72f..ea21409 100644 (file)
@@ -936,18 +936,21 @@ test_9a() {
                return 0
        fi
 
-       lfsck_prep 70 70
+       check_mount_and_prep
+       $LFS mkdir -i 0 $DIR/$tdir/lfsck || error "(1) Fail to mkdir lfsck"
+       $LFS setstripe -c 1 -i -1 $DIR/$tdir/lfsck
+       createmany -o $DIR/$tdir/lfsck/f 5000
 
        local BASE_SPEED1=100
        local RUN_TIME1=10
-       $START_NAMESPACE -r -s $BASE_SPEED1 || error "(3) Fail to start LFSCK!"
+       $START_LAYOUT -r -s $BASE_SPEED1 || error "(2) Fail to start LFSCK!"
 
        sleep $RUN_TIME1
-       STATUS=$($SHOW_NAMESPACE | awk '/^status/ { print $2 }')
+       STATUS=$($SHOW_LAYOUT | awk '/^status/ { print $2 }')
        [ "$STATUS" == "scanning-phase1" ] ||
                error "(3) Expect 'scanning-phase1', but got '$STATUS'"
 
-       local SPEED=$($SHOW_NAMESPACE |
+       local SPEED=$($SHOW_LAYOUT |
                      awk '/^average_speed_phase1/ { print $2 }')
 
        # There may be time error, normally it should be less than 2 seconds.
@@ -966,7 +969,7 @@ test_9a() {
                $LCTL set_param -n mdd.${MDT_DEV}.lfsck_speed_limit $BASE_SPEED2
        sleep $RUN_TIME2
 
-       SPEED=$($SHOW_NAMESPACE | awk '/^average_speed_phase1/ { print $2 }')
+       SPEED=$($SHOW_LAYOUT | awk '/^average_speed_phase1/ { print $2 }')
        # MIN_MARGIN = 0.8 = 8 / 10
        local MIN_SPEED=$(((BASE_SPEED1 * (RUN_TIME1 - TIME_DIFF) + \
                            BASE_SPEED2 * (RUN_TIME2 - TIME_DIFF)) / \
@@ -992,8 +995,8 @@ test_9a() {
                $LCTL set_param -n mdd.${MDT_DEV}.lfsck_speed_limit 0
 
        wait_update_facet $SINGLEMDS \
-           "$LCTL get_param -n mdd.${MDT_DEV}.lfsck_namespace|\
-           awk '/^status/ { print \\\$2 }'" "completed" 30 ||
+               "$LCTL get_param -n mdd.${MDT_DEV}.lfsck_layout |
+               awk '/^status/ { print \\\$2 }'" "completed" 30 ||
                error "(7) Failed to get expected 'completed'"
 }
 run_test 9a "LFSCK speed control (1)"