diff --git a/weed/mount/inode_to_path.go b/weed/mount/inode_to_path.go index 1e2126b74..cae0144bc 100644 --- a/weed/mount/inode_to_path.go +++ b/weed/mount/inode_to_path.go @@ -21,13 +21,13 @@ type InodeEntry struct { isChildrenCached bool } -func NewInodeToPath() *InodeToPath { +func NewInodeToPath(root util.FullPath) *InodeToPath { t := &InodeToPath{ inode2path: make(map[uint64]*InodeEntry), path2inode: make(map[util.FullPath]uint64), } - t.inode2path[1] = &InodeEntry{"/", 1, true, false} - t.path2inode["/"] = 1 + t.inode2path[1] = &InodeEntry{root, 1, true, false} + t.path2inode[root] = 1 return t } diff --git a/weed/mount/meta_cache/meta_cache.go b/weed/mount/meta_cache/meta_cache.go index 994f00463..8c434787a 100644 --- a/weed/mount/meta_cache/meta_cache.go +++ b/weed/mount/meta_cache/meta_cache.go @@ -14,6 +14,7 @@ import ( // e.g. fill fileId field for chunks type MetaCache struct { + root util.FullPath localStore filer.VirtualFilerStore // sync.RWMutex uidGidMapper *UidGidMapper @@ -22,8 +23,10 @@ type MetaCache struct { invalidateFunc func(fullpath util.FullPath, entry *filer_pb.Entry) } -func NewMetaCache(dbFolder string, uidGidMapper *UidGidMapper, markCachedFn func(path util.FullPath), isCachedFn func(path util.FullPath) bool, invalidateFunc func(util.FullPath, *filer_pb.Entry)) *MetaCache { +func NewMetaCache(dbFolder string, uidGidMapper *UidGidMapper, root util.FullPath, + markCachedFn func(path util.FullPath), isCachedFn func(path util.FullPath) bool, invalidateFunc func(util.FullPath, *filer_pb.Entry)) *MetaCache { return &MetaCache{ + root: root, localStore: openMetaStore(dbFolder), markCachedFn: markCachedFn, isCachedFn: isCachedFn, diff --git a/weed/mount/meta_cache/meta_cache_init.go b/weed/mount/meta_cache/meta_cache_init.go index ef14fbb3f..679cb953d 100644 --- a/weed/mount/meta_cache/meta_cache_init.go +++ b/weed/mount/meta_cache/meta_cache_init.go @@ -33,7 +33,7 @@ func EnsureVisited(mc *MetaCache, client filer_pb.FilerClient, dirPath util.Full } // continue to parent directory - if currentPath != "/" { + if currentPath != mc.root { parent, _ := currentPath.DirAndName() currentPath = util.FullPath(parent) } else { diff --git a/weed/mount/weedfs.go b/weed/mount/weedfs.go index 157d385c7..0e5489198 100644 --- a/weed/mount/weedfs.go +++ b/weed/mount/weedfs.go @@ -73,7 +73,7 @@ func NewSeaweedFileSystem(option *Option) *WFS { RawFileSystem: fuse.NewDefaultRawFileSystem(), option: option, signature: util.RandomInt32(), - inodeToPath: NewInodeToPath(), + inodeToPath: NewInodeToPath(util.FullPath(option.FilerMountRootPath)), fhmap: NewFileHandleToInode(), dhmap: NewDirectoryHandleToInode(), } @@ -84,12 +84,14 @@ func NewSeaweedFileSystem(option *Option) *WFS { wfs.chunkCache = chunk_cache.NewTieredChunkCache(256, option.getUniqueCacheDir(), option.CacheSizeMB, 1024*1024) } - wfs.metaCache = meta_cache.NewMetaCache(path.Join(option.getUniqueCacheDir(), "meta"), option.UidGidMapper, func(path util.FullPath) { - wfs.inodeToPath.MarkChildrenCached(path) - }, func(path util.FullPath) bool { - return wfs.inodeToPath.IsChildrenCached(path) - }, func(filePath util.FullPath, entry *filer_pb.Entry) { - }) + wfs.metaCache = meta_cache.NewMetaCache(path.Join(option.getUniqueCacheDir(), "meta"), option.UidGidMapper, + util.FullPath(option.FilerMountRootPath), + func(path util.FullPath) { + wfs.inodeToPath.MarkChildrenCached(path) + }, func(path util.FullPath) bool { + return wfs.inodeToPath.IsChildrenCached(path) + }, func(filePath util.FullPath, entry *filer_pb.Entry) { + }) grace.OnInterrupt(func() { wfs.metaCache.Shutdown() os.RemoveAll(option.getUniqueCacheDir())