From 10a4a628e9305c49eb14c45fcc6b414b47b6a8e5 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Sun, 25 Oct 2020 09:42:47 -0700 Subject: [PATCH] refresh cached file entry from sync metadata updates --- weed/filesys/file.go | 2 +- weed/filesys/meta_cache/meta_cache.go | 2 ++ weed/filesys/wfs.go | 10 ++++++---- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/weed/filesys/file.go b/weed/filesys/file.go index 98ee010d8..bba4335b7 100644 --- a/weed/filesys/file.go +++ b/weed/filesys/file.go @@ -253,7 +253,7 @@ func (file *File) Forget() { } func (file *File) maybeLoadEntry(ctx context.Context) error { - if (file.entry == nil || len(file.entry.HardLinkId) != 0) && file.isOpen <= 0 { + if (len(file.entry.HardLinkId) != 0) && file.isOpen <= 0 { entry, err := file.wfs.maybeLoadEntry(file.dir.FullPath(), file.Name) if err != nil { glog.V(3).Infof("maybeLoadEntry file %s/%s: %v", file.dir.FullPath(), file.Name, err) diff --git a/weed/filesys/meta_cache/meta_cache.go b/weed/filesys/meta_cache/meta_cache.go index 0dd129623..81b2d77c3 100644 --- a/weed/filesys/meta_cache/meta_cache.go +++ b/weed/filesys/meta_cache/meta_cache.go @@ -70,6 +70,7 @@ func (mc *MetaCache) AtomicUpdateEntryFromFiler(ctx context.Context, oldPath uti // skip the unnecessary deletion // leave the update to the following InsertEntry operation } else { + glog.V(3).Infof("DeleteEntry %s/%s", oldPath,oldPath.Name()) if err := mc.localStore.DeleteEntry(ctx, oldPath); err != nil { return err } @@ -82,6 +83,7 @@ func (mc *MetaCache) AtomicUpdateEntryFromFiler(ctx context.Context, oldPath uti if newEntry != nil { newDir, _ := newEntry.DirAndName() if mc.visitedBoundary.HasVisited(util.FullPath(newDir)) { + glog.V(3).Infof("InsertEntry %s/%s", newDir,newEntry.Name()) if err := mc.localStore.InsertEntry(ctx, newEntry); err != nil { return err } diff --git a/weed/filesys/wfs.go b/weed/filesys/wfs.go index 265fc95a8..912be3c05 100644 --- a/weed/filesys/wfs.go +++ b/weed/filesys/wfs.go @@ -119,10 +119,12 @@ func (wfs *WFS) AcquireHandle(file *File, uid, gid uint32) (fileHandle *FileHand defer wfs.handlesLock.Unlock() inodeId := file.fullpath().AsInode() - existingHandle, found := wfs.handles[inodeId] - if found && existingHandle != nil { - file.isOpen++ - return existingHandle + if file.isOpen > 0 { + existingHandle, found := wfs.handles[inodeId] + if found && existingHandle != nil { + file.isOpen++ + return existingHandle + } } fileHandle = newFileHandle(file, uid, gid)