Public bug reported:

Suppose you have a file in hostA:

  hostA$ ls -l /tmp/files
   -rw-rw-r-- 2 root root 563016 Jan 10 15:01 test.txt

You download it from the hostB using:

  hostB$ rsync -u --inplace --partial -a hostA::files/* .

If the transfer is aborted, hostB will get only a partial file:

  hostB$ ls -l /tmp/files
   -rw-rw-r-- 2 root root   2024 Jan 11 18:00 test.txt
  
BUT the ctime/mtime of hostB/test.txt now is NEWER than hostA/test.txt(and 
mtime == ctime). So, if you run the same rsync -u command again:

  hostB$ rsync -u --inplace --partial -a hostA::files/* .

Rsync will SKIP THE FILE, because hostB/test.txt is "newer" than
hostA/test.txt. So you CAN'T resume using rsync -u command, and you will
think there are no differences.

To avoid this bug, rsync must create the file with ctime=mtime=0. And if
the file already exists before transfer, rsync -u must not change his
current ctime/mtime. Ctime/mtime must be updated ONLY after the transfer
was successfully completed.

Note this is really need because there are scenarios where checksum
comparison can't be used, only comparison by time. For example, to avoid
deleting changes made in hostB to test.txt. Also I need to use
--inplace.

** Affects: rsync (Ubuntu)
     Importance: Undecided
         Status: New

-- 
You received this bug notification because you are a member of Ubuntu
Touch seeded packages, which is subscribed to rsync in Ubuntu.
https://bugs.launchpad.net/bugs/1659950

Title:
  rsync -u --inplace --partial -a can't resume transfer

Status in rsync package in Ubuntu:
  New

Bug description:
  Suppose you have a file in hostA:

    hostA$ ls -l /tmp/files
     -rw-rw-r-- 2 root root 563016 Jan 10 15:01 test.txt

  You download it from the hostB using:

    hostB$ rsync -u --inplace --partial -a hostA::files/* .

  If the transfer is aborted, hostB will get only a partial file:

    hostB$ ls -l /tmp/files
     -rw-rw-r-- 2 root root   2024 Jan 11 18:00 test.txt
    
  BUT the ctime/mtime of hostB/test.txt now is NEWER than hostA/test.txt(and 
mtime == ctime). So, if you run the same rsync -u command again:

    hostB$ rsync -u --inplace --partial -a hostA::files/* .

  Rsync will SKIP THE FILE, because hostB/test.txt is "newer" than
  hostA/test.txt. So you CAN'T resume using rsync -u command, and you
  will think there are no differences.

  To avoid this bug, rsync must create the file with ctime=mtime=0. And
  if the file already exists before transfer, rsync -u must not change
  his current ctime/mtime. Ctime/mtime must be updated ONLY after the
  transfer was successfully completed.

  Note this is really need because there are scenarios where checksum
  comparison can't be used, only comparison by time. For example, to
  avoid deleting changes made in hostB to test.txt. Also I need to use
  --inplace.

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/rsync/+bug/1659950/+subscriptions

-- 
Mailing list: https://launchpad.net/~touch-packages
Post to     : touch-packages@lists.launchpad.net
Unsubscribe : https://launchpad.net/~touch-packages
More help   : https://help.launchpad.net/ListHelp

Reply via email to