POSIX: ensure file and directory inodes are different

this is just an in memory representation.

POSIX wants different inode numbers for the same named file or directory.
This commit is contained in:
chrislu
2022-01-11 23:44:48 -08:00
parent 5bb37d5905
commit 2dcb8cb93b
7 changed files with 43 additions and 34 deletions

View File

@@ -18,16 +18,16 @@ type MetaCache struct {
// sync.RWMutex
visitedBoundary *bounded_tree.BoundedTree
uidGidMapper *UidGidMapper
invalidateFunc func(util.FullPath)
invalidateFunc func(fullpath util.FullPath, isDirectory bool)
}
func NewMetaCache(dbFolder string, baseDir util.FullPath, uidGidMapper *UidGidMapper, invalidateFunc func(util.FullPath)) *MetaCache {
func NewMetaCache(dbFolder string, baseDir util.FullPath, uidGidMapper *UidGidMapper, invalidateFunc func(util.FullPath, bool)) *MetaCache {
return &MetaCache{
localStore: openMetaStore(dbFolder),
visitedBoundary: bounded_tree.NewBoundedTree(baseDir),
uidGidMapper: uidGidMapper,
invalidateFunc: func(fullpath util.FullPath) {
invalidateFunc(fullpath)
invalidateFunc: func(fullpath util.FullPath, isDirectory bool) {
invalidateFunc(fullpath, isDirectory)
},
}
}

View File

@@ -40,16 +40,16 @@ func SubscribeMetaEvents(mc *MetaCache, selfSignature int32, client filer_pb.Fil
if err == nil {
if message.OldEntry != nil && message.NewEntry != nil {
oldKey := util.NewFullPath(resp.Directory, message.OldEntry.Name)
mc.invalidateFunc(oldKey)
mc.invalidateFunc(oldKey, message.OldEntry.IsDirectory)
if message.OldEntry.Name != message.NewEntry.Name {
newKey := util.NewFullPath(dir, message.NewEntry.Name)
mc.invalidateFunc(newKey)
mc.invalidateFunc(newKey, message.NewEntry.IsDirectory)
}
} else if message.OldEntry == nil && message.NewEntry != nil {
// no need to invaalidate
} else if message.OldEntry != nil && message.NewEntry == nil {
oldKey := util.NewFullPath(resp.Directory, message.OldEntry.Name)
mc.invalidateFunc(oldKey)
mc.invalidateFunc(oldKey, message.OldEntry.IsDirectory)
}
}