aboutsummaryrefslogtreecommitdiff
path: root/weed/filesys/dir_rename.go
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2020-08-14 00:22:49 -0700
committerChris Lu <chris.lu@gmail.com>2020-08-14 00:22:49 -0700
commita7f669044eed395ed9ca86c534c504e11af8d3e0 (patch)
treec48d7b7a0425477992a7a1c74bce9c547a96a84a /weed/filesys/dir_rename.go
parentedfa73782fe934ebda68fda1db490c964ca52028 (diff)
downloadseaweedfs-a7f669044eed395ed9ca86c534c504e11af8d3e0.tar.xz
seaweedfs-a7f669044eed395ed9ca86c534c504e11af8d3e0.zip
rename also applies to open file handle
Diffstat (limited to 'weed/filesys/dir_rename.go')
-rw-r--r--weed/filesys/dir_rename.go9
1 files changed, 8 insertions, 1 deletions
diff --git a/weed/filesys/dir_rename.go b/weed/filesys/dir_rename.go
index c2ff6f407..0e417e0ab 100644
--- a/weed/filesys/dir_rename.go
+++ b/weed/filesys/dir_rename.go
@@ -64,9 +64,16 @@ func (dir *Dir) Rename(ctx context.Context, req *fuse.RenameRequest, newDirector
// fmt.Printf("rename path: %v => %v\n", oldPath, newPath)
dir.wfs.fsNodeCache.Move(oldPath, newPath)
+ // change file handle
dir.wfs.handlesLock.Lock()
defer dir.wfs.handlesLock.Unlock()
- delete(dir.wfs.handles, oldPath.AsInode())
+ inodeId := oldPath.AsInode()
+ existingHandle, found := dir.wfs.handles[inodeId]
+ if !found || existingHandle == nil {
+ return err
+ }
+ delete(dir.wfs.handles, inodeId)
+ dir.wfs.handles[newPath.AsInode()] = existingHandle
return err
}