diff --git a/weed/filesys/dir.go b/weed/filesys/dir.go index 5e9ede79d..ba9f84654 100644 --- a/weed/filesys/dir.go +++ b/weed/filesys/dir.go @@ -120,6 +120,7 @@ func (dir *Dir) Create(ctx context.Context, req *fuse.CreateRequest, if err == nil { file := dir.newFile(req.Name, nil) dir.NodeMap[req.Name] = file + file.isOpen = true return file, &FileHandle{ f: file, RequestId: req.Header.ID, diff --git a/weed/filesys/file.go b/weed/filesys/file.go index 09ae4c871..d63f9d62d 100644 --- a/weed/filesys/file.go +++ b/weed/filesys/file.go @@ -23,13 +23,14 @@ type File struct { dir *Dir wfs *WFS attributes *filer_pb.FuseAttributes + isOpen bool } func (file *File) Attr(context context.Context, attr *fuse.Attr) error { fullPath := filepath.Join(file.dir.Path, file.Name) - if file.attributes == nil { + if file.attributes == nil || !file.isOpen { item := file.wfs.listDirectoryEntriesCache.Get(fullPath) if item != nil { entry := item.Value().(*filer_pb.Entry) @@ -80,6 +81,8 @@ func (file *File) Open(ctx context.Context, req *fuse.OpenRequest, resp *fuse.Op glog.V(3).Infof("%v file open %+v", fullPath, req) + file.isOpen = true + return &FileHandle{ f: file, RequestId: req.Header.ID, diff --git a/weed/filesys/filehandle.go b/weed/filesys/filehandle.go index 414057f4e..d9dc6795e 100644 --- a/weed/filesys/filehandle.go +++ b/weed/filesys/filehandle.go @@ -184,6 +184,8 @@ func (fh *FileHandle) Release(ctx context.Context, req *fuse.ReleaseRequest) err glog.V(3).Infof("%+v/%v release fh", fh.f.dir.Path, fh.f.Name) + fh.f.isOpen = false + return nil }