From 6d1bcd4b8c9a0579d703ecae3d6d3f06bdff644b Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Fri, 25 May 2018 01:22:31 -0700 Subject: [PATCH] use existing attributes instead of fetching from filer --- weed/filesys/file.go | 53 +++++++++++++++++++++++--------------------- 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/weed/filesys/file.go b/weed/filesys/file.go index c8d96c316..09ae4c871 100644 --- a/weed/filesys/file.go +++ b/weed/filesys/file.go @@ -28,36 +28,39 @@ type File struct { func (file *File) Attr(context context.Context, attr *fuse.Attr) error { fullPath := filepath.Join(file.dir.Path, file.Name) - item := file.wfs.listDirectoryEntriesCache.Get(fullPath) - if item != nil { - entry := item.Value().(*filer_pb.Entry) - file.Chunks = entry.Chunks - file.attributes = entry.Attributes - glog.V(1).Infof("file attr read cached %v attributes", file.Name) - } else { - err := file.wfs.withFilerClient(func(client filer_pb.SeaweedFilerClient) error { - - request := &filer_pb.GetEntryAttributesRequest{ - Name: file.Name, - ParentDir: file.dir.Path, - } - resp, err := client.GetEntryAttributes(context, request) - if err != nil { - glog.V(0).Infof("file attr read file %v: %v", request, err) - return err - } + if file.attributes == nil { + item := file.wfs.listDirectoryEntriesCache.Get(fullPath) + if item != nil { + entry := item.Value().(*filer_pb.Entry) + file.Chunks = entry.Chunks + file.attributes = entry.Attributes + glog.V(1).Infof("file attr read cached %v attributes", file.Name) + } else { + err := file.wfs.withFilerClient(func(client filer_pb.SeaweedFilerClient) error { + + request := &filer_pb.GetEntryAttributesRequest{ + Name: file.Name, + ParentDir: file.dir.Path, + } - file.attributes = resp.Attributes - file.Chunks = resp.Chunks + resp, err := client.GetEntryAttributes(context, request) + if err != nil { + glog.V(0).Infof("file attr read file %v: %v", request, err) + return err + } - glog.V(1).Infof("file attr %v %+v: %d", fullPath, file.attributes, filer2.TotalSize(file.Chunks)) + file.attributes = resp.Attributes + file.Chunks = resp.Chunks - return nil - }) + glog.V(1).Infof("file attr %v %+v: %d", fullPath, file.attributes, filer2.TotalSize(file.Chunks)) - if err != nil { - return err + return nil + }) + + if err != nil { + return err + } } }