Browse Source

mount: delete target entry first during move

pull/3210/head
chrislu 3 years ago
parent
commit
76f26c4b99
  1. 15
      weed/mount/inode_to_path.go

15
weed/mount/inode_to_path.go

@ -157,6 +157,10 @@ func (i *InodeToPath) MovePath(sourcePath, targetPath util.FullPath) (replacedIn
defer i.Unlock()
sourceInode, sourceFound := i.path2inode[sourcePath]
targetInode, targetFound := i.path2inode[targetPath]
if targetFound {
delete(i.inode2path, targetInode)
delete(i.path2inode, targetPath)
}
if sourceFound {
delete(i.path2inode, sourcePath)
i.path2inode[targetPath] = sourceInode
@ -165,11 +169,14 @@ func (i *InodeToPath) MovePath(sourcePath, targetPath util.FullPath) (replacedIn
// so no need to worry about their source inodes
return
}
i.inode2path[sourceInode].FullPath = targetPath
if targetFound {
delete(i.inode2path, targetInode)
if entry, entryFound := i.inode2path[sourceInode]; entryFound {
entry.FullPath = targetPath
entry.isChildrenCached = false
if !targetFound {
entry.nlookup++
}
} else {
i.inode2path[sourceInode].nlookup++
glog.Errorf("MovePath %s to %s: sourceInode %s not found", sourcePath, targetPath, sourceInode)
}
return targetInode
}

Loading…
Cancel
Save