Whamcloud - gitweb
LU-4293 utils: handle lfs migrate failure in lfs_migrate 16/8616/2
authorAndreas Dilger <andreas.dilger@intel.com>
Wed, 18 Dec 2013 08:50:56 +0000 (01:50 -0700)
committerOleg Drokin <oleg.drokin@intel.com>
Sat, 11 Jan 2014 05:13:11 +0000 (05:13 +0000)
If "lfs migrate" returns an error, possibly because it is refusing
to migrate an IGIF FID, fall back to using rsync to copy the file
and rename it.  Print a message in this case so the user knows it
is not a fatal error yet.

Signed-off-by: Andreas Dilger <andreas.dilger@intel.com>
Change-Id: I114006afb93d8c8d78923a874f3b914200500c1e
Reviewed-on: http://review.whamcloud.com/8616
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Faccini Bruno <bruno.faccini@intel.com>
Reviewed-by: Bob Glossman <bob.glossman@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/scripts/lfs_migrate
lustre/utils/lfs.c

index bf595b3..e9c8aae 100755 (executable)
@@ -147,16 +147,17 @@ lfs_migrate() {
                               2> /dev/null)
 
                        [ -z "$COUNT" -o -z "$SIZE" ] && UNLINK=""
+                       SIZE=${LFS_SIZE_OPT}${SIZE}
                fi
 
                # first try to migrate inside lustre
                # if failed go back to old rsync mode
                if [[ $RSYNC_MODE == false ]]; then
-                       $LFS migrate -c${COUNT} ${LFS_SIZE_OPT}${SIZE} $OLDNAME
-                       if [[ $? == 0 ]]; then
+                       if $LFS migrate -c${COUNT} ${SIZE} "$OLDNAME"; then
                                $ECHO "done"
                                continue
                        else
+                               echo "falling back to rsync-based migration"
                                RSYNC_MODE=true
                        fi
                fi
@@ -167,8 +168,7 @@ lfs_migrate() {
                        continue
                fi
 
-               [ "$UNLINK" ] && $LFS setstripe -c${COUNT} \
-                                     ${LFS_SIZE_OPT}${SIZE} "$NEWNAME"
+               [ "$UNLINK" ] && $LFS setstripe -c${COUNT} ${SIZE} "$NEWNAME"
 
                # we use --inplace, since we created our own temp file already
                if ! $RSYNC -a --inplace $RSYNC_OPTS "$OLDNAME" "$NEWNAME";then
index 5f4c849..614fbc3 100644 (file)
@@ -533,14 +533,12 @@ static int lfs_migrate(char *name, unsigned long long stripe_size,
                                 SWAP_LAYOUTS_KEEP_MTIME |
                                 SWAP_LAYOUTS_KEEP_ATIME);
        if (rc == -EAGAIN) {
-               fprintf(stderr, "file dataversion for %s has changed"
-                               " during copy, migration is aborted\n",
-                       name);
+               fprintf(stderr, "%s: dataversion changed during copy, "
+                       "migration aborted\n", name);
                goto error;
        }
        if (rc != 0)
-               fprintf(stderr, "cannot swap layouts between %s and "
-                       "a volatile file (%s)\n",
+               fprintf(stderr, "%s: swap layout to new file failed: %s\n",
                        name, strerror(-rc));
 
 error: