Browse Source

use existing attributes instead of fetching from filer

pull/664/head
Chris Lu 7 years ago
parent
commit
6d1bcd4b8c
  1. 53
      weed/filesys/file.go

53
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
}
}
}

Loading…
Cancel
Save