Whamcloud - gitweb
LU-11481 utils: disable lfs migrate -m 60/33960/7
authorOlaf Faaland <faaland1@llnl.gov>
Fri, 4 Jan 2019 19:27:15 +0000 (11:27 -0800)
committerOleg Drokin <green@whamcloud.com>
Fri, 15 Feb 2019 01:37:46 +0000 (01:37 +0000)
Lustre 2.11 and earlier have bugs in directory migration that risk
data loss.  The fixes landed to 2.12 are too complex to backport.
This patch prevents an unaware user from risking their data by using
lfs migrate -m.  This is not a backport from master.

Skip all the tests that issue lfs migrate -m as they now fail.

Change-Id: I6d620429a0e10941f88285fbcf178797a71be3a6
Signed-off-by: Olaf Faaland <faaland1@llnl.gov>
Reviewed-on: https://review.whamcloud.com/33960
Tested-by: Jenkins
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Lai Siyao <lai.siyao@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/doc/lfs-migrate.1
lustre/doc/lfs.1
lustre/tests/recovery-small.sh
lustre/tests/sanity-lfsck.sh
lustre/tests/sanity.sh
lustre/tests/sanityn.sh
lustre/utils/lfs.c

index 7a8609d..4dbc379 100644 (file)
@@ -12,7 +12,7 @@ lfs migrate \- migrate files or directories between MDTs or OSTs.
 Migrate MDT inodes or OST objects between MDTs and OSTs respectively. For the
 case of MDT inode migration:
 .TP
-.B migrate -m|--mdt-index <mdt_idx> \fIdirectory\fR
+.B migrate -m|--mdt-index <mdt_idx> \fIOPTION DISABLED\fR
 .br
 Move the file metadata (inode) from one MDT to MDT with index \fBmdt_idx\fR.
 Migration of striped directories or individual files between MDTs is not
@@ -22,6 +22,10 @@ migration. Access to files within the directory is blocked until migration is
 complete.
 .TP
 \fIWARNING\fR
+Lustre 2.10 has bugs that make migrate -m unsafe.  See
+https://jira.whamcloud.com/browse/LU-11481.
+.TP
+\fIWARNING\fR
 A migrated file or directory will have a new inode number and FID.  As
 a consequence, files archieved by Lustre HSM cannot currently be migrated
 and migrated files that have a new inode number may confuse backup tools.
index 043a8e0..85a5609 100644 (file)
@@ -49,7 +49,7 @@ lfs \- Lustre utility to create a file with specific striping pattern, find the
         <\fIdirname\fR|\fIfilename\fR> ...
 .br
 .B lfs migrate \fB-m <mdt_index>\fR
-.IR directory
+.IR OPTION_DISABLED
 .br
 .B lfs migrate [\fB-c | --stripe-count <stripe_count>\fR]
                [\fB-i | --stripe-index <start_ost_idx>\fR]
index 271aae5..0a66e58 100755 (executable)
@@ -2120,6 +2120,9 @@ test_110g () {
        [[ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.6.57) ]] ||
                { skip "Need MDS version at least 2.6.57"; return 0; }
 
+       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.11.56) ] &&
+               skip "lustre < 2.11.56 does not support migrate -m"
+
        [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return 0
        local remote_dir=$DIR/$tdir/remote_dir
        local MDTIDX=1
index 6062af8..a2fde80 100644 (file)
@@ -4451,6 +4451,9 @@ run_test 29b "LFSCK can repair bad nlink count (2)"
 
 test_29c()
 {
+       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.11.56) ] &&
+               skip "lustre < 2.11.56 does not support migrate -m "
+
        echo "#####"
        echo "The namespace LFSCK will create many hard links to the target"
        echo "file as to exceed the linkEA size limitation. Under such case"
index bb6f18a..40ef2cd 100755 (executable)
@@ -695,8 +695,8 @@ test_17n() {
        check_fs_consistency_17n ||
                error "e2fsck report error after unlink files under remote dir"
 
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.4.50) ] &&
-               skip "lustre < 2.4.50 does not support migrate mv " && return
+       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.11.56) ] &&
+               skip "lustre < 2.11.56 does not support migrate -m "
 
        for ((i = 0; i < 10; i++)); do
                mkdir -p $DIR/$tdir/remote_dir_${i}
@@ -11531,6 +11531,9 @@ test_160d() {
        remote_mds_nodsh && skip "remote MDS with nodsh" && return
        [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
 
+       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.11.56) ] &&
+               skip "lustre < 2.11.56 does not support migrate -m "
+
        local server_version=$(lustre_version_code mds1)
        local CL_MASK_PARAM="mdd.$MDT0.changelog_mask"
 
@@ -13768,6 +13771,9 @@ test_230b() {
        local migrate_dir=$DIR/$tdir/migrate_dir
        local other_dir=$DIR/$tdir/other_dir
 
+       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.11.56) ] &&
+               skip "lustre < 2.11.56 does not support migrate -m "
+
        test_mkdir $DIR/$tdir
        test_mkdir -i0 -c1 $migrate_dir
        test_mkdir -i0 -c1 $other_dir
@@ -13929,6 +13935,9 @@ test_230c() {
        local file
        local migrate_dir=$DIR/$tdir/migrate_dir
 
+       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.11.56) ] &&
+               skip "lustre < 2.11.56 does not support migrate -m "
+
        #If migrating directory fails in the middle, all entries of
        #the directory is still accessiable.
        test_mkdir $DIR/$tdir
@@ -13983,6 +13992,9 @@ test_230d() {
        local i
        local j
 
+       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.11.56) ] &&
+               skip "lustre < 2.11.56 does not support migrate -m "
+
        test_mkdir $DIR/$tdir
        test_mkdir -i0 -c1 $migrate_dir
 
@@ -14009,6 +14021,9 @@ run_test 230d "check migrate big directory"
 test_230e() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
        [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
+       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.11.56) ] &&
+               skip "lustre < 2.11.56 does not support migrate -m "
+
        local i
        local j
        local a_fid
@@ -14057,6 +14072,9 @@ test_230f() {
        local a_fid
        local ln_fid
 
+       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.11.56) ] &&
+               skip "lustre < 2.11.56 does not support migrate -m "
+
        mkdir -p $DIR/$tdir
        mkdir $DIR/$tdir/migrate_dir
        $LFS mkdir -i1 $DIR/$tdir/other_dir
@@ -14103,6 +14121,9 @@ test_230g() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
        [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
 
+       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.11.56) ] &&
+               skip "lustre < 2.11.56 does not support migrate -m "
+
        mkdir -p $DIR/$tdir/migrate_dir
 
        $LFS migrate -m 1000 $DIR/$tdir/migrate_dir &&
@@ -14114,8 +14135,9 @@ run_test 230g "migrate dir to non-exist MDT"
 test_230h() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
        [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
-       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.7.64) ] &&
-               skip "Need MDS version at least 2.7.64" && return
+       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.11.56) ] &&
+               skip "lustre < 2.11.56 does not support migrate -m "
+
        local mdt_index
 
        mkdir -p $DIR/$tdir/migrate_dir
@@ -14142,6 +14164,9 @@ test_230i() {
        [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
        [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
 
+       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.11.56) ] &&
+               skip "lustre < 2.11.56 does not support migrate -m "
+
        mkdir -p $DIR/$tdir/migrate_dir
 
        $LFS migrate -m 1 $DIR/$tdir/migrate_dir/ ||
index 28dd89c..5b5f784 100755 (executable)
@@ -1043,8 +1043,9 @@ test_33d() {
                        touch $DIR/$tdir/d1/src" \
                "mv $DIR/$tdir/d1/src $DIR/$tdir/d2/tgt"
        # migrate
-       op_trigger_cos "$LFS mkdir -i 0 $DIR/$tdir" \
-               "$LFS migrate -m 1 $DIR/$tdir"
+       [ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.11.56) ] &&
+               op_trigger_cos "$LFS mkdir -i 0 $DIR/$tdir" \
+                       "$LFS migrate -m 1 $DIR/$tdir"
 
        return 0
 }
@@ -3700,6 +3701,10 @@ run_test 79 "xattr: intent error"
 
 test_80a() {
        [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
+
+       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.11.56) ] &&
+               skip "lustre < 2.11.56 does not support migrate -m "
+
        local MDTIDX=1
        local mdt_index
        local i
@@ -3747,6 +3752,10 @@ cleanup_80b() {
 
 test_80b() {
        [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
+
+       [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.11.56) ] &&
+               skip "lustre < 2.11.56 does not support migrate -m "
+
        local migrate_dir1=$DIR1/$tdir/migrate_dir
        local migrate_dir2=$DIR2/$tdir/migrate_dir
        local migrate_run=$LUSTRE/tests/migrate.sh
index fd2229b..4aa15bc 100644 (file)
@@ -1674,6 +1674,12 @@ static int lfs_setstripe(int argc, char **argv)
        }
 
        if (mdt_idx_arg != NULL) {
+               fprintf(stderr,
+                       "error: %s: Directory migration unsafe in Lustre 2.10.  "
+                       "See https://jira.whamcloud.com/browse/LU-11481\n",
+                       argv[0]);
+               goto error;
+
                /* initialize migrate mdt parameters */
                migrate_mdt_param.fp_mdt_index = strtoul(mdt_idx_arg, &end, 0);
                if (*end != '\0') {