systemd / casync

Content-Addressable Data Synchronization Tool
1.5k stars 117 forks source link

calocation: fix ESTALE when extracting to regular file #218

Open gportay opened 5 years ago

gportay commented 5 years ago

Dear Maintainer(s),

I met the issue discribed below when I want to extract an archive in an existing regular file. Note that it works well if the file is a block device.

I do not think this is the appropriate fix. It is much like a workaround. I need your help to fix it properly.

I would like to know why it is interresting to make such a test on the modification time of the file.

Regards, Gaël


There is an issue when an archive is extracted to a regular file that exists already.

# Extract the archive.caibx to dest.bin (dest.bin does not exist yet)
$ casync extract http://localhost/archive.caibx dest.bin

# Extract the archive.caibx to existing dest.bin
$ casync extract http://localhost/archive.caibx dest.bin --log-level debug --verbose
Acquiring http://localhost/archive.caibx...
Setting min/avg/max chunk size: 16384 / 65536 / 262144
Failed to run decoder step: Stale file handle
Failed to run synchronizer: Stale file handle

The error raised is a difference in the modify time.

In the case of the destination regular file exists (ie. the second call in the example above), the path goes to several fallocate/write calls that causes the modification time to be updated and leads to that error.

This commit drops the check for the modification time.