Skip to content

Commit

Permalink
fix delete in the owncloud storage driver
Browse files Browse the repository at this point in the history
  • Loading branch information
David Christofas committed Jun 28, 2021
1 parent 7ecc818 commit e65c2e6
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 8 deletions.
6 changes: 6 additions & 0 deletions changelog/unreleased/fix-delete-owncloud-storage-driver.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Bugfix: Properly handle name collisions for deletes in the owncloud driver

In the owncloud storage driver when we delete a file we append the deletion time to the file name.
If two fast consecutive deletes happened, the deletion time would be the same and if the two files had the same name we ended up with only one file in the trashbin.

https://github.com/cs3org/reva/pull/1833
18 changes: 10 additions & 8 deletions pkg/storage/fs/owncloud/owncloud.go
Original file line number Diff line number Diff line change
Expand Up @@ -1526,15 +1526,17 @@ func (fs *ocfs) trash(ctx context.Context, ip string, rp string, origin string)
// move to trash location
dtime := time.Now().Unix()
tgt := filepath.Join(rp, fmt.Sprintf("%s.d%d", filepath.Base(ip), dtime))
if err := os.Rename(ip, tgt); err != nil {
if os.IsExist(err) {
// timestamp collision, try again with higher value:
dtime++
tgt := filepath.Join(rp, fmt.Sprintf("%s.d%d", filepath.Base(ip), dtime))
if err := os.Rename(ip, tgt); err != nil {
return errors.Wrap(err, "ocfs: could not move item to trash")
}
if _, err := os.Stat(tgt); os.IsNotExist(err) {
if err := os.Rename(ip, tgt); err != nil {
return err
}
return fs.propagate(ctx, filepath.Dir(ip))
}
// timestamp collision, try again with higher value:
dtime++
tgt = filepath.Join(rp, fmt.Sprintf("%s.d%d", filepath.Base(ip), dtime))
if err := os.Rename(ip, tgt); err != nil {
return errors.Wrap(err, "ocfs: could not move item to trash")
}

return fs.propagate(ctx, filepath.Dir(ip))
Expand Down

0 comments on commit e65c2e6

Please sign in to comment.