fix removePathFromInode2Path

This commit is contained in:
chrislu 2022-07-23 13:21:42 -07:00
parent 4d5dc55766
commit 02c2d81cde
2 changed files with 88 additions and 4 deletions

View file

@ -174,10 +174,15 @@ func (i *InodeToPath) RemovePath(path util.FullPath) {
} }
func (i *InodeToPath) removePathFromInode2Path(inode uint64, path util.FullPath) { func (i *InodeToPath) removePathFromInode2Path(inode uint64, path util.FullPath) {
if ie, found := i.inode2path[inode]; found { ie, found := i.inode2path[inode]
if ie.removeOnePath(path) && len(ie.paths) == 0 { if !found {
delete(i.inode2path, inode) return
} }
if !ie.removeOnePath(path) {
return
}
if len(ie.paths) == 0 {
delete(i.inode2path, inode)
} }
} }

View file

@ -0,0 +1,79 @@
package mount
import (
"github.com/chrislusf/seaweedfs/weed/util"
"testing"
)
func TestInodeEntry_removeOnePath(t *testing.T) {
tests := []struct {
name string
entry InodeEntry
p util.FullPath
want bool
count int
}{
{
name: "empty",
entry: InodeEntry{},
p: "x",
want: false,
count: 0,
},
{
name: "single",
entry: InodeEntry{
paths: []util.FullPath{"/x"},
},
p: "/x",
want: true,
count: 0,
},
{
name: "first",
entry: InodeEntry{
paths: []util.FullPath{"/x", "/y", "/z"},
},
p: "/x",
want: true,
count: 2,
},
{
name: "middle",
entry: InodeEntry{
paths: []util.FullPath{"/x", "/y", "/z"},
},
p: "/y",
want: true,
count: 2,
},
{
name: "last",
entry: InodeEntry{
paths: []util.FullPath{"/x", "/y", "/z"},
},
p: "/z",
want: true,
count: 2,
},
{
name: "not found",
entry: InodeEntry{
paths: []util.FullPath{"/x", "/y", "/z"},
},
p: "/t",
want: false,
count: 3,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := tt.entry.removeOnePath(tt.p); got != tt.want {
t.Errorf("removeOnePath() = %v, want %v", got, tt.want)
}
if tt.count != len(tt.entry.paths) {
t.Errorf("removeOnePath path count = %v, want %v", len(tt.entry.paths), tt.count)
}
})
}
}