chrislu
3 years ago
3 changed files with 101 additions and 12 deletions
@ -0,0 +1,59 @@ |
|||
package mount |
|||
|
|||
import ( |
|||
"context" |
|||
"github.com/chrislusf/seaweedfs/weed/filer" |
|||
"github.com/chrislusf/seaweedfs/weed/filesys/meta_cache" |
|||
"github.com/chrislusf/seaweedfs/weed/glog" |
|||
"github.com/chrislusf/seaweedfs/weed/pb/filer_pb" |
|||
"github.com/hanwen/go-fuse/v2/fuse" |
|||
) |
|||
|
|||
// Lookup is called by the kernel when the VFS wants to know
|
|||
// about a file inside a directory. Many lookup calls can
|
|||
// occur in parallel, but only one call happens for each (dir,
|
|||
// name) pair.
|
|||
|
|||
func (wfs *WFS) Lookup(cancel <-chan struct{}, header *fuse.InHeader, name string, out *fuse.EntryOut) (code fuse.Status) { |
|||
|
|||
dirPath := wfs.inodeToPath.GetPath(header.NodeId) |
|||
|
|||
println("lookup", name, "dir inode", header.NodeId) |
|||
|
|||
fullFilePath := dirPath.Child(name) |
|||
|
|||
visitErr := meta_cache.EnsureVisited(wfs.metaCache, wfs, dirPath) |
|||
if visitErr != nil { |
|||
glog.Errorf("dir Lookup %s: %v", dirPath, visitErr) |
|||
return fuse.EIO |
|||
} |
|||
localEntry, cacheErr := wfs.metaCache.FindEntry(context.Background(), fullFilePath) |
|||
if cacheErr == filer_pb.ErrNotFound { |
|||
return fuse.ENOENT |
|||
} |
|||
|
|||
if localEntry == nil { |
|||
// glog.V(3).Infof("dir Lookup cache miss %s", fullFilePath)
|
|||
entry, err := filer_pb.GetEntry(wfs, fullFilePath) |
|||
if err != nil { |
|||
glog.V(1).Infof("dir GetEntry %s: %v", fullFilePath, err) |
|||
return fuse.ENOENT |
|||
} |
|||
localEntry = filer.FromPbEntry(string(dirPath), entry) |
|||
} else { |
|||
glog.V(4).Infof("dir Lookup cache hit %s", fullFilePath) |
|||
} |
|||
|
|||
if localEntry == nil { |
|||
return fuse.ENOENT |
|||
} |
|||
|
|||
inode := wfs.inodeToPath.GetInode(fullFilePath) |
|||
|
|||
println("found", name, "inode", inode) |
|||
|
|||
wfs.outputEntry(out, inode, localEntry) |
|||
|
|||
return fuse.OK |
|||
|
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue