From a207285af772fde0cb6f2f7524c9815329347857 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Tue, 21 Apr 2020 22:00:34 -0700 Subject: [PATCH] cache metadata on startup --- weed/filesys/meta_cache/meta_cache.go | 5 ++++- weed/filesys/meta_cache/meta_cache_init.go | 14 ++++++++++++-- weed/filesys/wfs.go | 2 +- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/weed/filesys/meta_cache/meta_cache.go b/weed/filesys/meta_cache/meta_cache.go index 0aea69050..f3416ca18 100644 --- a/weed/filesys/meta_cache/meta_cache.go +++ b/weed/filesys/meta_cache/meta_cache.go @@ -20,10 +20,13 @@ func NewMetaCache(dbFolder string) *MetaCache { func openMetaStore(dbFolder string) filer2.FilerStore { + os.RemoveAll(dbFolder) os.MkdirAll(dbFolder, 0755) store := &leveldb.LevelDBStore{} - config := &cacheConfig{} + config := &cacheConfig{ + dir: dbFolder, + } if err := store.Initialize(config, ""); err != nil { glog.Fatalf("Failed to initialize metadata cache store for %s: %+v", store.GetName(), err) diff --git a/weed/filesys/meta_cache/meta_cache_init.go b/weed/filesys/meta_cache/meta_cache_init.go index 8591f190a..a9d0fa876 100644 --- a/weed/filesys/meta_cache/meta_cache_init.go +++ b/weed/filesys/meta_cache/meta_cache_init.go @@ -1,10 +1,20 @@ package meta_cache import ( + "context" + + "github.com/chrislusf/seaweedfs/weed/filer2" + "github.com/chrislusf/seaweedfs/weed/glog" "github.com/chrislusf/seaweedfs/weed/pb/filer_pb" + "github.com/chrislusf/seaweedfs/weed/util" ) -func InitMetaCache(mc *MetaCache, client filer_pb.FilerClient) error { - +func InitMetaCache(mc *MetaCache, client filer_pb.FilerClient, path string) error { + filer_pb.TraverseBfs(client, util.FullPath(path), func(parentPath util.FullPath, pbEntry *filer_pb.Entry) { + entry := filer2.FromPbEntry(string(parentPath), pbEntry) + if err := mc.InsertEntry(context.Background(), entry); err != nil { + glog.V(0).Infof("read %s: %v", entry.FullPath, err) + } + }) return nil } diff --git a/weed/filesys/wfs.go b/weed/filesys/wfs.go index e67e77613..de1fb1d2e 100644 --- a/weed/filesys/wfs.go +++ b/weed/filesys/wfs.go @@ -95,7 +95,7 @@ func NewSeaweedFileSystem(option *Option) *WFS { } if wfs.option.AsyncMetaDataCaching { wfs.metaCache = meta_cache.NewMetaCache(path.Join(option.CacheDir, "meta")) - if err := meta_cache.InitMetaCache(wfs.metaCache, wfs); err != nil{ + if err := meta_cache.InitMetaCache(wfs.metaCache, wfs, wfs.option.FilerMountRootPath); err != nil{ glog.V(0).Infof("failed to init meta cache: %v", err) } else { go meta_cache.SubscribeMetaEvents(wfs.metaCache, wfs, wfs.option.FilerMountRootPath)