Whamcloud - gitweb
LU-9187 lfsck: handle parameters properly 49/25849/4
authorFan Yong <fan.yong@intel.com>
Tue, 1 Nov 2016 18:48:23 +0000 (02:48 +0800)
committerOleg Drokin <oleg.drokin@intel.com>
Wed, 19 Apr 2017 04:43:14 +0000 (04:43 +0000)
Currently, because of improper handling the parameters as to
related parameters (such as "failout", "dryrun") only work for
OI scrub, but do not work for namespace LFSCK and layout LFSCK.

Signed-off-by: Fan Yong <fan.yong@intel.com>
Change-Id: Ib38f7480758a59ba6a042948a8b49c36b401f100
Reviewed-on: https://review.whamcloud.com/25849
Tested-by: Jenkins
Reviewed-by: Lai Siyao <lai.siyao@intel.com>
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: James Simmons <uja.ornl@yahoo.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/lfsck/lfsck_bookmark.c
lustre/lfsck/lfsck_layout.c
lustre/lfsck/lfsck_namespace.c
lustre/tests/sanity-lfsck.sh

index f3bdee7..76b6f11 100644 (file)
@@ -263,9 +263,19 @@ int lfsck_set_param(const struct lu_env *env, struct lfsck_instance *lfsck,
                        dirty = true;
                }
 
+               if ((bk->lb_param & LPF_OST_ORPHAN) &&
+                   !(start->ls_flags & LPF_OST_ORPHAN)) {
+                       bk->lb_param &= ~LPF_OST_ORPHAN;
+                       dirty = true;
+               } else if (!(bk->lb_param & LPF_OST_ORPHAN) &&
+                          (start->ls_flags & LPF_OST_ORPHAN)) {
+                       bk->lb_param |= LPF_OST_ORPHAN;
+                       dirty = true;
+               }
+
                if ((start->ls_valid & LSV_CREATE_OSTOBJ) || reset) {
                        if ((bk->lb_param & LPF_CREATE_OSTOBJ) &&
-                           !(start->ls_valid & LSV_CREATE_OSTOBJ)) {
+                           !(start->ls_flags & LPF_CREATE_OSTOBJ)) {
                                bk->lb_param &= ~LPF_CREATE_OSTOBJ;
                                dirty = true;
                        } else if (!(bk->lb_param & LPF_CREATE_OSTOBJ) &&
@@ -277,7 +287,7 @@ int lfsck_set_param(const struct lu_env *env, struct lfsck_instance *lfsck,
 
                if ((start->ls_valid & LSV_CREATE_MDTOBJ) || reset) {
                        if ((bk->lb_param & LPF_CREATE_MDTOBJ) &&
-                           !(start->ls_valid & LSV_CREATE_MDTOBJ)) {
+                           !(start->ls_flags & LPF_CREATE_MDTOBJ)) {
                                bk->lb_param &= ~LPF_CREATE_MDTOBJ;
                                dirty = true;
                        } else if (!(bk->lb_param & LPF_CREATE_MDTOBJ) &&
@@ -289,7 +299,7 @@ int lfsck_set_param(const struct lu_env *env, struct lfsck_instance *lfsck,
 
                if ((start->ls_valid & LSV_DELAY_CREATE_OSTOBJ) || reset) {
                        if ((bk->lb_param & LPF_DELAY_CREATE_OSTOBJ) &&
-                           !(start->ls_valid & LSV_DELAY_CREATE_OSTOBJ)) {
+                           !(start->ls_flags & LPF_DELAY_CREATE_OSTOBJ)) {
                                bk->lb_param &= ~LPF_DELAY_CREATE_OSTOBJ;
                                dirty = true;
                        } else if (!(bk->lb_param & LPF_DELAY_CREATE_OSTOBJ) &&
@@ -301,39 +311,29 @@ int lfsck_set_param(const struct lu_env *env, struct lfsck_instance *lfsck,
 
                if ((start->ls_valid & LSV_ERROR_HANDLE) || reset) {
                        if ((bk->lb_param & LPF_FAILOUT) &&
-                           !(start->ls_valid & LSV_ERROR_HANDLE)) {
+                           !(start->ls_flags & LPF_FAILOUT)) {
                                bk->lb_param &= ~LPF_FAILOUT;
                                dirty = true;
-                       } else if (!(start->ls_flags & LPF_FAILOUT) &&
-                                  (bk->lb_param & LPF_FAILOUT)) {
-                               bk->lb_param &= ~LPF_FAILOUT;
+                       } else if (!(bk->lb_param & LPF_FAILOUT) &&
+                                  (start->ls_flags & LPF_FAILOUT)) {
+                               bk->lb_param |= LPF_FAILOUT;
                                dirty = true;
                        }
                }
 
                if ((start->ls_valid & LSV_DRYRUN) || reset) {
                        if ((bk->lb_param & LPF_DRYRUN) &&
-                          !(start->ls_valid & LSV_DRYRUN)) {
-                               bk->lb_param &= ~LPF_DRYRUN;
-                               dirty = true;
-                       } else if (!(start->ls_flags & LPF_DRYRUN) &&
-                                  (bk->lb_param & LPF_DRYRUN)) {
+                           !(start->ls_flags & LPF_DRYRUN)) {
                                bk->lb_param &= ~LPF_DRYRUN;
                                lfsck->li_drop_dryrun = 1;
                                dirty = true;
+                       } else if (!(bk->lb_param & LPF_DRYRUN) &&
+                                  (start->ls_flags & LPF_DRYRUN)) {
+                               bk->lb_param |= LPF_DRYRUN;
+                               dirty = true;
                        }
                }
 
-               if ((bk->lb_param & LPF_OST_ORPHAN) &&
-                   !(start->ls_flags & LPF_OST_ORPHAN)) {
-                       bk->lb_param &= ~LPF_OST_ORPHAN;
-                       dirty = true;
-               } else if (!(bk->lb_param & LPF_OST_ORPHAN) &&
-                          (start->ls_flags & LPF_OST_ORPHAN)) {
-                       bk->lb_param |= LPF_OST_ORPHAN;
-                       dirty = true;
-               }
-
                if (start->ls_valid & LSV_SPEED_LIMIT) {
                        if (__lfsck_set_speed(lfsck, start->ls_speed_limit))
                                dirty = true;
index c355539..4773b81 100644 (file)
@@ -1459,8 +1459,9 @@ static int lfsck_layout_double_scan_result(const struct lu_env *env,
                                lo->ll_status = LS_COMPLETED;
                        }
                }
+               lo->ll_flags &= ~LF_SCANNED_ONCE;
                if (!(lfsck->li_bookmark_ram.lb_param & LPF_DRYRUN))
-                       lo->ll_flags &= ~(LF_SCANNED_ONCE | LF_INCONSISTENT);
+                       lo->ll_flags &= ~LF_INCONSISTENT;
                lo->ll_time_last_complete = lo->ll_time_last_checkpoint;
                lo->ll_success_count++;
        } else if (rc == 0) {
index 91a82bc..5a09bdc 100644 (file)
@@ -6271,8 +6271,9 @@ static int lfsck_namespace_double_scan_result(const struct lu_env *env,
                        ns->ln_status = LS_PARTIAL;
                else
                        ns->ln_status = LS_COMPLETED;
+               ns->ln_flags &= ~LF_SCANNED_ONCE;
                if (!(lfsck->li_bookmark_ram.lb_param & LPF_DRYRUN))
-                       ns->ln_flags &= ~(LF_SCANNED_ONCE | LF_INCONSISTENT);
+                       ns->ln_flags &= ~LF_INCONSISTENT;
                ns->ln_time_last_complete = ns->ln_time_last_checkpoint;
                ns->ln_success_count++;
        } else if (rc == 0) {
index d1dcc90..17746c5 100644 (file)
@@ -5029,6 +5029,28 @@ test_32()
 }
 run_test 32 "stop LFSCK when some OST failed"
 
+test_33()
+{
+       lfsck_prep 5 5
+
+       $START_LAYOUT --dryrun -o -r ||
+               error "(1) Fail to start layout LFSCK"
+       wait_all_targets_blocked layout completed 2
+
+       local PARAMS=$($SHOW_LAYOUT | awk '/^param/ { print $2 }')
+       [ "$PARAMS" == "dryrun,all_targets,orphan" ] ||
+               error "(3) Expect 'dryrun,all_targets,orphan', got '$PARAMS'"
+
+       $START_NAMESPACE -e abort -A -r ||
+               error "(4) Fail to start namespace LFSCK"
+       wait_all_targets_blocked namespace completed 5
+
+       PARAMS=$($SHOW_NAMESPACE | awk '/^param/ { print $2 }')
+       [ "$PARAMS" == "failout,all_targets" ] ||
+               error "(6) Expect 'failout,all_targets', got '$PARAMS'"
+}
+run_test 33 "check LFSCK paramters"
+
 # restore MDS/OST size
 MDSSIZE=${SAVED_MDSSIZE}
 OSTSIZE=${SAVED_OSTSIZE}