mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2024-01-19 02:48:24 +00:00
working
This commit is contained in:
parent
661a34e23d
commit
b0a5193e32
|
@ -59,3 +59,13 @@ func (i *InodeToPath) HasPath(path util.FullPath) bool {
|
||||||
_, found := i.path2inode[path]
|
_, found := i.path2inode[path]
|
||||||
return found
|
return found
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (i *InodeToPath) HasInode(inode uint64) bool {
|
||||||
|
if inode == 1 {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
i.RLock()
|
||||||
|
defer i.RUnlock()
|
||||||
|
_, found := i.inode2path[inode]
|
||||||
|
return found
|
||||||
|
}
|
||||||
|
|
|
@ -46,7 +46,7 @@ func (wfs *WFS) RemoveXAttr(cancel <-chan struct{}, header *fuse.InHeader, attr
|
||||||
}
|
}
|
||||||
|
|
||||||
func (wfs *WFS) setRootAttr(out *fuse.AttrOut) {
|
func (wfs *WFS) setRootAttr(out *fuse.AttrOut) {
|
||||||
now := uint64(time.Now().Second())
|
now := uint64(time.Now().Unix())
|
||||||
out.AttrValid = 119
|
out.AttrValid = 119
|
||||||
out.Ino = 1
|
out.Ino = 1
|
||||||
setBlksize(&out.Attr, blockSize)
|
setBlksize(&out.Attr, blockSize)
|
||||||
|
@ -69,17 +69,18 @@ func (wfs *WFS) setAttrByPbEntry(out *fuse.Attr, inode uint64, entry *filer_pb.E
|
||||||
out.Atime = uint64(entry.Attributes.Mtime)
|
out.Atime = uint64(entry.Attributes.Mtime)
|
||||||
if entry.HardLinkCounter > 0 {
|
if entry.HardLinkCounter > 0 {
|
||||||
out.Nlink = uint32(entry.HardLinkCounter)
|
out.Nlink = uint32(entry.HardLinkCounter)
|
||||||
|
} else {
|
||||||
|
out.Nlink = 1
|
||||||
}
|
}
|
||||||
out.Size = filer.FileSize(entry)
|
out.Size = filer.FileSize(entry)
|
||||||
out.Blocks = out.Size/blockSize + 1
|
out.Blocks = (out.Size + blockSize - 1) / blockSize
|
||||||
setBlksize(out, blockSize)
|
setBlksize(out, blockSize)
|
||||||
out.Nlink = 1
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (wfs *WFS) setAttrByFilerEntry(out *fuse.Attr, inode uint64, entry *filer.Entry) {
|
func (wfs *WFS) setAttrByFilerEntry(out *fuse.Attr, inode uint64, entry *filer.Entry) {
|
||||||
out.Ino = inode
|
out.Ino = inode
|
||||||
out.Size = entry.FileSize
|
out.Size = entry.FileSize
|
||||||
out.Blocks = out.Size/blockSize + 1
|
out.Blocks = (out.Size + blockSize - 1) / blockSize
|
||||||
setBlksize(out, blockSize)
|
setBlksize(out, blockSize)
|
||||||
out.Atime = uint64(entry.Attr.Mtime.Unix())
|
out.Atime = uint64(entry.Attr.Mtime.Unix())
|
||||||
out.Mtime = uint64(entry.Attr.Mtime.Unix())
|
out.Mtime = uint64(entry.Attr.Mtime.Unix())
|
||||||
|
@ -88,14 +89,16 @@ func (wfs *WFS) setAttrByFilerEntry(out *fuse.Attr, inode uint64, entry *filer.E
|
||||||
out.Mode = toSystemMode(entry.Attr.Mode)
|
out.Mode = toSystemMode(entry.Attr.Mode)
|
||||||
if entry.HardLinkCounter > 0 {
|
if entry.HardLinkCounter > 0 {
|
||||||
out.Nlink = uint32(entry.HardLinkCounter)
|
out.Nlink = uint32(entry.HardLinkCounter)
|
||||||
}
|
} else {
|
||||||
out.Nlink = 1
|
out.Nlink = 1
|
||||||
|
}
|
||||||
out.Uid = entry.Attr.Uid
|
out.Uid = entry.Attr.Uid
|
||||||
out.Gid = entry.Attr.Gid
|
out.Gid = entry.Attr.Gid
|
||||||
}
|
}
|
||||||
|
|
||||||
func (wfs *WFS) outputEntry(out *fuse.EntryOut, inode uint64, entry *filer.Entry) {
|
func (wfs *WFS) outputEntry(out *fuse.EntryOut, inode uint64, entry *filer.Entry) {
|
||||||
// out.Generation = 1
|
out.NodeId = inode
|
||||||
|
out.Generation = 1
|
||||||
out.EntryValid = 1
|
out.EntryValid = 1
|
||||||
out.AttrValid = 1
|
out.AttrValid = 1
|
||||||
wfs.setAttrByFilerEntry(&out.Attr, inode, entry)
|
wfs.setAttrByFilerEntry(&out.Attr, inode, entry)
|
||||||
|
|
|
@ -14,6 +14,9 @@ import (
|
||||||
// Directory handling
|
// Directory handling
|
||||||
|
|
||||||
func (wfs *WFS) OpenDir(cancel <-chan struct{}, input *fuse.OpenIn, out *fuse.OpenOut) (code fuse.Status) {
|
func (wfs *WFS) OpenDir(cancel <-chan struct{}, input *fuse.OpenIn, out *fuse.OpenOut) (code fuse.Status) {
|
||||||
|
if !wfs.inodeToPath.HasInode(input.NodeId) {
|
||||||
|
return fuse.ENOENT
|
||||||
|
}
|
||||||
return fuse.OK
|
return fuse.OK
|
||||||
}
|
}
|
||||||
func (wfs *WFS) ReleaseDir(input *fuse.ReleaseIn) {
|
func (wfs *WFS) ReleaseDir(input *fuse.ReleaseIn) {
|
||||||
|
@ -35,13 +38,16 @@ func (wfs *WFS) doReadDirectory(input *fuse.ReadIn, out *fuse.DirEntryList, isPl
|
||||||
|
|
||||||
println("input size", input.Size, "offset", input.Offset, "pid", input.Caller.Pid)
|
println("input size", input.Size, "offset", input.Offset, "pid", input.Caller.Pid)
|
||||||
|
|
||||||
|
var counter uint64
|
||||||
var dirEntry fuse.DirEntry
|
var dirEntry fuse.DirEntry
|
||||||
if input.Offset == 0 {
|
if input.Offset == 0 {
|
||||||
|
counter++
|
||||||
dirEntry.Ino = input.NodeId
|
dirEntry.Ino = input.NodeId
|
||||||
dirEntry.Name = "."
|
dirEntry.Name = "."
|
||||||
dirEntry.Mode = toSystemMode(os.ModeDir)
|
dirEntry.Mode = toSystemMode(os.ModeDir)
|
||||||
out.AddDirEntry(dirEntry)
|
out.AddDirEntry(dirEntry)
|
||||||
|
|
||||||
|
counter++
|
||||||
parentDir, _ := dirPath.DirAndName()
|
parentDir, _ := dirPath.DirAndName()
|
||||||
parentInode := wfs.inodeToPath.GetInode(util.FullPath(parentDir))
|
parentInode := wfs.inodeToPath.GetInode(util.FullPath(parentDir))
|
||||||
dirEntry.Ino = parentInode
|
dirEntry.Ino = parentInode
|
||||||
|
@ -51,7 +57,6 @@ func (wfs *WFS) doReadDirectory(input *fuse.ReadIn, out *fuse.DirEntryList, isPl
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var counter uint64
|
|
||||||
processEachEntryFn := func(entry *filer.Entry, isLast bool) bool {
|
processEachEntryFn := func(entry *filer.Entry, isLast bool) bool {
|
||||||
counter++
|
counter++
|
||||||
if counter <= input.Offset {
|
if counter <= input.Offset {
|
||||||
|
|
Loading…
Reference in a new issue