Browse Source

mount: rename also invalidate source inode

pull/3293/head
chrislu 2 years ago
parent
commit
d685b94102
  1. 4
      weed/mount/inode_to_path.go
  2. 12
      weed/mount/weedfs_rename.go

4
weed/mount/inode_to_path.go

@ -152,7 +152,7 @@ func (i *InodeToPath) RemovePath(path util.FullPath) {
}
}
func (i *InodeToPath) MovePath(sourcePath, targetPath util.FullPath) (replacedInode uint64) {
func (i *InodeToPath) MovePath(sourcePath, targetPath util.FullPath) (sourceInode, targetInode uint64) {
i.Lock()
defer i.Unlock()
sourceInode, sourceFound := i.path2inode[sourcePath]
@ -178,7 +178,7 @@ func (i *InodeToPath) MovePath(sourcePath, targetPath util.FullPath) (replacedIn
} else {
glog.Errorf("MovePath %s to %s: sourceInode %d not found", sourcePath, targetPath, sourceInode)
}
return targetInode
return
}
func (i *InodeToPath) Forget(inode, nlookup uint64, onForgetDir func(dir util.FullPath)) {

12
weed/mount/weedfs_rename.go

@ -233,10 +233,16 @@ func (wfs *WFS) handleRenameResponse(ctx context.Context, resp *filer_pb.StreamR
oldPath := oldParent.Child(oldName)
newPath := newParent.Child(newName)
replacedInode := wfs.inodeToPath.MovePath(oldPath, newPath)
sourceInode, targetInode := wfs.inodeToPath.MovePath(oldPath, newPath)
if sourceInode != 0 {
if fh := wfs.fhmap.inode2fh[sourceInode]; foundFh && fh.entry != nil {
fh.entry.Name = newName
}
wfs.fuseServer.InodeNotify(sourceInode, 0, -1)
}
// invalidate attr and data
if replacedInode > 0 {
wfs.fuseServer.InodeNotify(replacedInode, 0, -1)
if targetInode != 0 {
wfs.fuseServer.InodeNotify(targetInode, 0, -1)
}
} else if resp.EventNotification.OldEntry != nil {

Loading…
Cancel
Save