aboutsummaryrefslogtreecommitdiff
path: root/weed/filesys/meta_cache/meta_cache.go
diff options
context:
space:
mode:
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