As @pared noticed, when you run two sequential dvc run commands with the same output:
dvc run -o out 'echo 1 >> out'
dvc run -o out 'echo 2 >> out'
you actually corrupt your cache file for first out, as it is still linked to the cache. We should at least unprotect outputs in this case or maybe even consider removing them by default. That will play nicely with the new --outs-persist flag.
There is no "fix" for this issue per se because duplicating outputs are unprotected via https://github.com/iterative/dvc/blob/35218a77ab62a62053c5e46e10deb37a6501093f/dvc/stage.py#L478
Fixed by #1789
@efiop , I tried to replicate the problem on my machine but it doesn't overwrite anything.
I'm currently using XFS, using hardlinks as my dvc config:
dvc init --no-scm
dvc run -o out `echo 1 > out`
dvc run -o out `echo 2 > out`
cat .dvc/cache/**/*`
โโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ File: .dvc/cache/c1/57a79031e1c40f85931829bc5fc552
โโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
1 โ bar
โโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ File: .dvc/cache/d3/b07384d113edec49eaa6238ad5ff00
โโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
1 โ foo
โโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
md5-792447e11d476bcb98d07d33b435f272
โฏ exa --tree --inode .dvc/cache/* out
inode Permissions Size User Date Modified Name
1077495202 drwxr-xr-x - mroutis 27 Mar 19:29 .dvc/cache/c1
1077494138 .rw-r--r-- 4 mroutis 27 Mar 19:29 โโโ 57a79031e1c40f85931829bc5fc552
540589766 drwxr-xr-x - mroutis 27 Mar 19:29 .dvc/cache/d3
1077494140 .rw-r--r-- 4 mroutis 27 Mar 19:29 โโโ b07384d113edec49eaa6238ad5ff00
1077494138 .rw-r--r-- 4 mroutis 27 Mar 19:29 out
Am I missing something? :thinking:
@mroutis As I mentioned before, there already was unprotect step in Stage.create. So cache corruption would not occur.