mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2024-01-19 02:48:24 +00:00
lighten up File object
file.entry only exists when file.isOpen
This commit is contained in:
parent
6bc09b18c4
commit
1adc8f86ea
|
@ -104,13 +104,12 @@ func (dir *Dir) Fsync(ctx context.Context, req *fuse.FsyncRequest) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (dir *Dir) newFile(name string, entry *filer_pb.Entry) fs.Node {
|
func (dir *Dir) newFile(name string) fs.Node {
|
||||||
f := dir.wfs.fsNodeCache.EnsureFsNode(util.NewFullPath(dir.FullPath(), name), func() fs.Node {
|
f := dir.wfs.fsNodeCache.EnsureFsNode(util.NewFullPath(dir.FullPath(), name), func() fs.Node {
|
||||||
return &File{
|
return &File{
|
||||||
Name: name,
|
Name: name,
|
||||||
dir: dir,
|
dir: dir,
|
||||||
wfs: dir.wfs,
|
wfs: dir.wfs,
|
||||||
entry: entry,
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
f.(*File).dir = dir // in case dir node was created later
|
f.(*File).dir = dir // in case dir node was created later
|
||||||
|
@ -144,7 +143,7 @@ func (dir *Dir) Create(ctx context.Context, req *fuse.CreateRequest,
|
||||||
return node, nil, nil
|
return node, nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
node = dir.newFile(req.Name, request.Entry)
|
node = dir.newFile(req.Name)
|
||||||
file := node.(*File)
|
file := node.(*File)
|
||||||
fh := dir.wfs.AcquireHandle(file, req.Uid, req.Gid)
|
fh := dir.wfs.AcquireHandle(file, req.Uid, req.Gid)
|
||||||
return file, fh, nil
|
return file, fh, nil
|
||||||
|
@ -157,13 +156,13 @@ func (dir *Dir) Mknod(ctx context.Context, req *fuse.MknodRequest) (fs.Node, err
|
||||||
return nil, fuse.EPERM
|
return nil, fuse.EPERM
|
||||||
}
|
}
|
||||||
|
|
||||||
request, err := dir.doCreateEntry(req.Name, req.Mode, req.Uid, req.Gid, false)
|
_, err := dir.doCreateEntry(req.Name, req.Mode, req.Uid, req.Gid, false)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
var node fs.Node
|
var node fs.Node
|
||||||
node = dir.newFile(req.Name, request.Entry)
|
node = dir.newFile(req.Name)
|
||||||
return node, nil
|
return node, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -294,7 +293,7 @@ func (dir *Dir) Lookup(ctx context.Context, req *fuse.LookupRequest, resp *fuse.
|
||||||
if entry.IsDirectory {
|
if entry.IsDirectory {
|
||||||
node = dir.newDirectory(fullFilePath)
|
node = dir.newDirectory(fullFilePath)
|
||||||
} else {
|
} else {
|
||||||
node = dir.newFile(req.Name, entry)
|
node = dir.newFile(req.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
// resp.EntryValid = time.Second
|
// resp.EntryValid = time.Second
|
||||||
|
|
|
@ -35,11 +35,11 @@ func (dir *Dir) Link(ctx context.Context, req *fuse.LinkRequest, old fs.Node) (f
|
||||||
|
|
||||||
glog.V(4).Infof("Link: %v/%v -> %v/%v", oldFile.dir.FullPath(), oldFile.Name, dir.FullPath(), req.NewName)
|
glog.V(4).Infof("Link: %v/%v -> %v/%v", oldFile.dir.FullPath(), oldFile.Name, dir.FullPath(), req.NewName)
|
||||||
|
|
||||||
if _, err := oldFile.maybeLoadEntry(ctx); err != nil {
|
oldEntry, err := oldFile.maybeLoadEntry(ctx)
|
||||||
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
oldEntry := oldFile.getEntry()
|
|
||||||
if oldEntry == nil {
|
if oldEntry == nil {
|
||||||
return nil, fuse.EIO
|
return nil, fuse.EIO
|
||||||
}
|
}
|
||||||
|
@ -72,7 +72,7 @@ func (dir *Dir) Link(ctx context.Context, req *fuse.LinkRequest, old fs.Node) (f
|
||||||
}
|
}
|
||||||
|
|
||||||
// apply changes to the filer, and also apply to local metaCache
|
// apply changes to the filer, and also apply to local metaCache
|
||||||
err := dir.wfs.WithFilerClient(func(client filer_pb.SeaweedFilerClient) error {
|
err = dir.wfs.WithFilerClient(func(client filer_pb.SeaweedFilerClient) error {
|
||||||
|
|
||||||
dir.wfs.mapPbIdFromLocalToFiler(request.Entry)
|
dir.wfs.mapPbIdFromLocalToFiler(request.Entry)
|
||||||
defer dir.wfs.mapPbIdFromFilerToLocal(request.Entry)
|
defer dir.wfs.mapPbIdFromFilerToLocal(request.Entry)
|
||||||
|
@ -97,11 +97,8 @@ func (dir *Dir) Link(ctx context.Context, req *fuse.LinkRequest, old fs.Node) (f
|
||||||
}
|
}
|
||||||
|
|
||||||
// create new file node
|
// create new file node
|
||||||
newNode := dir.newFile(req.NewName, request.Entry)
|
newNode := dir.newFile(req.NewName)
|
||||||
newFile := newNode.(*File)
|
newFile := newNode.(*File)
|
||||||
if _, err := newFile.maybeLoadEntry(ctx); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return newFile, err
|
return newFile, err
|
||||||
|
|
||||||
|
@ -147,7 +144,7 @@ func (dir *Dir) Symlink(ctx context.Context, req *fuse.SymlinkRequest) (fs.Node,
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
|
|
||||||
symlink := dir.newFile(req.NewName, request.Entry)
|
symlink := dir.newFile(req.NewName)
|
||||||
|
|
||||||
return symlink, err
|
return symlink, err
|
||||||
|
|
||||||
|
|
|
@ -286,7 +286,7 @@ func (file *File) maybeLoadEntry(ctx context.Context) (entry *filer_pb.Entry, er
|
||||||
return entry, err
|
return entry, err
|
||||||
}
|
}
|
||||||
if entry != nil {
|
if entry != nil {
|
||||||
file.entry = entry
|
// file.entry = entry
|
||||||
} else {
|
} else {
|
||||||
glog.Warningf("maybeLoadEntry not found entry %s/%s: %v", file.dir.FullPath(), file.Name, err)
|
glog.Warningf("maybeLoadEntry not found entry %s/%s: %v", file.dir.FullPath(), file.Name, err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -211,6 +211,7 @@ func (fh *FileHandle) Release(ctx context.Context, req *fuse.ReleaseRequest) err
|
||||||
if fh.f.isOpen == 1 {
|
if fh.f.isOpen == 1 {
|
||||||
|
|
||||||
fh.f.isOpen--
|
fh.f.isOpen--
|
||||||
|
fh.f.entry = nil
|
||||||
fh.entryViewCache = nil
|
fh.entryViewCache = nil
|
||||||
fh.reader = nil
|
fh.reader = nil
|
||||||
|
|
||||||
|
|
|
@ -162,8 +162,9 @@ func (wfs *WFS) AcquireHandle(file *File, uid, gid uint32) (fileHandle *FileHand
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
entry, _ := file.maybeLoadEntry(context.Background())
|
||||||
|
file.entry = entry
|
||||||
fileHandle = newFileHandle(file, uid, gid)
|
fileHandle = newFileHandle(file, uid, gid)
|
||||||
file.maybeLoadEntry(context.Background())
|
|
||||||
file.isOpen++
|
file.isOpen++
|
||||||
|
|
||||||
wfs.handles[inodeId] = fileHandle
|
wfs.handles[inodeId] = fileHandle
|
||||||
|
|
Loading…
Reference in a new issue