From 5d0e1d8d741b93c8f77b6ff709b5079580c7dda6 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Wed, 22 Apr 2020 15:40:47 -0700 Subject: [PATCH] also writes to local meta cache before waiting for subscribed meta events --- weed/filesys/dir.go | 23 +++++++++++++++++++++++ weed/filesys/dir_link.go | 6 ++++++ weed/filesys/file.go | 4 ++++ weed/filesys/filehandle.go | 4 ++++ 4 files changed, 37 insertions(+) diff --git a/weed/filesys/dir.go b/weed/filesys/dir.go index 5b0e17ea3..b91aa3a72 100644 --- a/weed/filesys/dir.go +++ b/weed/filesys/dir.go @@ -7,6 +7,7 @@ import ( "strings" "time" + "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" @@ -137,6 +138,11 @@ func (dir *Dir) Create(ctx context.Context, req *fuse.CreateRequest, } return fuse.EIO } + + if dir.wfs.option.AsyncMetaDataCaching { + dir.wfs.metaCache.InsertEntry(context.Background(), filer2.FromPbEntry(request.Directory, request.Entry)) + } + return nil }); err != nil { return nil, nil, err @@ -184,6 +190,10 @@ func (dir *Dir) Mkdir(ctx context.Context, req *fuse.MkdirRequest) (fs.Node, err return err } + if dir.wfs.option.AsyncMetaDataCaching { + dir.wfs.metaCache.InsertEntry(context.Background(), filer2.FromPbEntry(request.Directory, request.Entry)) + } + return nil }) @@ -320,6 +330,10 @@ func (dir *Dir) removeOneFile(req *fuse.RemoveRequest) error { return fuse.ENOENT } + if dir.wfs.option.AsyncMetaDataCaching { + dir.wfs.metaCache.DeleteEntry(context.Background(), filePath) + } + return nil } @@ -336,6 +350,11 @@ func (dir *Dir) removeFolder(req *fuse.RemoveRequest) error { glog.V(3).Infof("not found remove %s/%s: %v", dir.FullPath(), req.Name, err) return fuse.ENOENT } + + if dir.wfs.option.AsyncMetaDataCaching { + dir.wfs.metaCache.DeleteEntry(context.Background(), t) + } + return nil } @@ -458,6 +477,10 @@ func (dir *Dir) saveEntry() error { return fuse.EIO } + if dir.wfs.option.AsyncMetaDataCaching { + dir.wfs.metaCache.UpdateEntry(context.Background(), filer2.FromPbEntry(request.Directory, request.Entry)) + } + return nil }) } diff --git a/weed/filesys/dir_link.go b/weed/filesys/dir_link.go index 3c415c3a6..d1858e99b 100644 --- a/weed/filesys/dir_link.go +++ b/weed/filesys/dir_link.go @@ -6,6 +6,7 @@ import ( "syscall" "time" + "github.com/chrislusf/seaweedfs/weed/filer2" "github.com/chrislusf/seaweedfs/weed/glog" "github.com/chrislusf/seaweedfs/weed/pb/filer_pb" "github.com/seaweedfs/fuse" @@ -40,6 +41,11 @@ func (dir *Dir) Symlink(ctx context.Context, req *fuse.SymlinkRequest) (fs.Node, glog.V(0).Infof("symlink %s/%s: %v", dir.FullPath(), req.NewName, err) return fuse.EIO } + + if dir.wfs.option.AsyncMetaDataCaching { + dir.wfs.metaCache.InsertEntry(context.Background(), filer2.FromPbEntry(request.Directory, request.Entry)) + } + return nil }) diff --git a/weed/filesys/file.go b/weed/filesys/file.go index 024e69b26..9df94241a 100644 --- a/weed/filesys/file.go +++ b/weed/filesys/file.go @@ -279,6 +279,10 @@ func (file *File) saveEntry() error { return fuse.EIO } + if file.wfs.option.AsyncMetaDataCaching { + file.wfs.metaCache.UpdateEntry(context.Background(), filer2.FromPbEntry(request.Directory, request.Entry)) + } + return nil }) } diff --git a/weed/filesys/filehandle.go b/weed/filesys/filehandle.go index d2983d53f..372d742ea 100644 --- a/weed/filesys/filehandle.go +++ b/weed/filesys/filehandle.go @@ -209,6 +209,10 @@ func (fh *FileHandle) Flush(ctx context.Context, req *fuse.FlushRequest) error { return fmt.Errorf("fh flush create %s: %v", fh.f.fullpath(), err) } + if fh.f.wfs.option.AsyncMetaDataCaching { + fh.f.wfs.metaCache.InsertEntry(context.Background(), filer2.FromPbEntry(request.Directory, request.Entry)) + } + fh.f.wfs.deleteFileChunks(garbages) for i, chunk := range garbages { glog.V(3).Infof("garbage %s chunks %d: %v [%d,%d)", fh.f.fullpath(), i, chunk.FileId, chunk.Offset, chunk.Offset+int64(chunk.Size))