aboutsummaryrefslogtreecommitdiff
path: root/weed/filesys/meta_cache/meta_cache.go
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2020-06-19 09:45:27 -0700
committerChris Lu <chris.lu@gmail.com>2020-06-19 09:45:42 -0700
commitf7a45d448f5efe1bea7c8fc5ee61cb7d535995b5 (patch)
tree07c9057b7c741dc15c8e1cd5e133ca3d6e9fa709 /weed/filesys/meta_cache/meta_cache.go
parentc0283eee1ad18d6a3907b186d3e2fc00fab83824 (diff)
downloadseaweedfs-f7a45d448f5efe1bea7c8fc5ee61cb7d535995b5.tar.xz
seaweedfs-f7a45d448f5efe1bea7c8fc5ee61cb7d535995b5.zip
FUSE mount: lazy loading meta cache
Diffstat (limited to 'weed/filesys/meta_cache/meta_cache.go')
-rw-r--r--weed/filesys/meta_cache/meta_cache.go25
1 files changed, 19 insertions, 6 deletions
diff --git a/weed/filesys/meta_cache/meta_cache.go b/weed/filesys/meta_cache/meta_cache.go
index 4c9090d42..3b04040a5 100644
--- a/weed/filesys/meta_cache/meta_cache.go
+++ b/weed/filesys/meta_cache/meta_cache.go
@@ -9,16 +9,19 @@ import (
"github.com/chrislusf/seaweedfs/weed/filer2/leveldb"
"github.com/chrislusf/seaweedfs/weed/glog"
"github.com/chrislusf/seaweedfs/weed/util"
+ "github.com/chrislusf/seaweedfs/weed/util/bounded_tree"
)
type MetaCache struct {
actualStore filer2.FilerStore
sync.RWMutex
+ visitedBoundary *bounded_tree.BoundedTree
}
func NewMetaCache(dbFolder string) *MetaCache {
return &MetaCache{
- actualStore: openMetaStore(dbFolder),
+ actualStore: openMetaStore(dbFolder),
+ visitedBoundary: bounded_tree.NewBoundedTree(),
}
}
@@ -49,14 +52,24 @@ func (mc *MetaCache) InsertEntry(ctx context.Context, entry *filer2.Entry) error
func (mc *MetaCache) AtomicUpdateEntry(ctx context.Context, oldPath util.FullPath, newEntry *filer2.Entry) error {
mc.Lock()
defer mc.Unlock()
- if oldPath != "" {
- if err := mc.actualStore.DeleteEntry(ctx, oldPath); err != nil {
- return err
+
+ oldDir, _ := oldPath.DirAndName()
+ if mc.visitedBoundary.HasVisited(util.FullPath(oldDir)) {
+ if oldPath != "" {
+ if err := mc.actualStore.DeleteEntry(ctx, oldPath); err != nil {
+ return err
+ }
}
+ }else{
+ // println("unknown old directory:", oldDir)
}
+
if newEntry != nil {
- if err := mc.actualStore.InsertEntry(ctx, newEntry); err != nil {
- return err
+ newDir, _ := newEntry.DirAndName()
+ if mc.visitedBoundary.HasVisited(util.FullPath(newDir)) {
+ if err := mc.actualStore.InsertEntry(ctx, newEntry); err != nil {
+ return err
+ }
}
}
return nil