mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2024-01-19 02:48:24 +00:00
fix nil
This commit is contained in:
parent
0d60e67816
commit
a22ee30596
|
@ -101,7 +101,7 @@ func (dir *Dir) Fsync(ctx context.Context, req *fuse.FsyncRequest) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (dir *Dir) newFile(name string, entry *filer_pb.Entry) fs.Node {
|
func (dir *Dir) newFile(name string, entry *filer_pb.Entry) fs.Node {
|
||||||
return 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,
|
||||||
|
@ -110,14 +110,17 @@ func (dir *Dir) newFile(name string, entry *filer_pb.Entry) fs.Node {
|
||||||
entryViewCache: nil,
|
entryViewCache: nil,
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
f.(*File).dir = dir // in case dir node was created later
|
||||||
|
return f
|
||||||
}
|
}
|
||||||
|
|
||||||
func (dir *Dir) newDirectory(fullpath util.FullPath, entry *filer_pb.Entry) fs.Node {
|
func (dir *Dir) newDirectory(fullpath util.FullPath, entry *filer_pb.Entry) fs.Node {
|
||||||
|
|
||||||
return dir.wfs.fsNodeCache.EnsureFsNode(fullpath, func() fs.Node {
|
d := dir.wfs.fsNodeCache.EnsureFsNode(fullpath, func() fs.Node {
|
||||||
return &Dir{name: entry.Name, wfs: dir.wfs, entry: entry, parent: dir}
|
return &Dir{name: entry.Name, wfs: dir.wfs, entry: entry, parent: dir}
|
||||||
})
|
})
|
||||||
|
d.(*Dir).parent = dir // in case dir node was created later
|
||||||
|
return d
|
||||||
}
|
}
|
||||||
|
|
||||||
func (dir *Dir) Create(ctx context.Context, req *fuse.CreateRequest,
|
func (dir *Dir) Create(ctx context.Context, req *fuse.CreateRequest,
|
||||||
|
|
|
@ -3,8 +3,9 @@ package filesys
|
||||||
import (
|
import (
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/chrislusf/seaweedfs/weed/util"
|
|
||||||
"github.com/seaweedfs/fuse/fs"
|
"github.com/seaweedfs/fuse/fs"
|
||||||
|
|
||||||
|
"github.com/chrislusf/seaweedfs/weed/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
type FsCache struct {
|
type FsCache struct {
|
||||||
|
@ -118,7 +119,6 @@ func (c *FsCache) Move(oldPath util.FullPath, newPath util.FullPath) *FsNode {
|
||||||
target = target.ensureChild(p)
|
target = target.ensureChild(p)
|
||||||
}
|
}
|
||||||
parent := target.parent
|
parent := target.parent
|
||||||
src.name = target.name
|
|
||||||
if dir, ok := src.node.(*Dir); ok {
|
if dir, ok := src.node.(*Dir); ok {
|
||||||
dir.name = target.name // target is not Dir, but a shortcut
|
dir.name = target.name // target is not Dir, but a shortcut
|
||||||
}
|
}
|
||||||
|
@ -132,6 +132,7 @@ func (c *FsCache) Move(oldPath util.FullPath, newPath util.FullPath) *FsNode {
|
||||||
|
|
||||||
target.deleteSelf()
|
target.deleteSelf()
|
||||||
|
|
||||||
|
src.name = target.name
|
||||||
src.connectToParent(parent)
|
src.connectToParent(parent)
|
||||||
|
|
||||||
return src
|
return src
|
||||||
|
@ -144,10 +145,14 @@ func (n *FsNode) connectToParent(parent *FsNode) {
|
||||||
oldNode.deleteSelf()
|
oldNode.deleteSelf()
|
||||||
}
|
}
|
||||||
if dir, ok := n.node.(*Dir); ok {
|
if dir, ok := n.node.(*Dir); ok {
|
||||||
dir.parent = parent.node.(*Dir)
|
if parent.node != nil {
|
||||||
|
dir.parent = parent.node.(*Dir)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if f, ok := n.node.(*File); ok {
|
if f, ok := n.node.(*File); ok {
|
||||||
f.dir = parent.node.(*Dir)
|
if parent.node != nil {
|
||||||
|
f.dir = parent.node.(*Dir)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
n.childrenLock.Lock()
|
n.childrenLock.Lock()
|
||||||
parent.children[n.name] = n
|
parent.children[n.name] = n
|
||||||
|
|
|
@ -94,3 +94,24 @@ func TestFsCacheMove(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func TestFsCacheMove2(t *testing.T) {
|
||||||
|
|
||||||
|
cache := newFsCache(nil)
|
||||||
|
|
||||||
|
cache.SetFsNode(util.FullPath("/a/b/d"), &File{Name: "dd"})
|
||||||
|
cache.SetFsNode(util.FullPath("/a/b/e"), &File{Name: "ee"})
|
||||||
|
|
||||||
|
cache.Move(util.FullPath("/a/b/d"), util.FullPath("/a/b/e"))
|
||||||
|
|
||||||
|
d := cache.GetFsNode(util.FullPath("/a/b/e"))
|
||||||
|
if d == nil {
|
||||||
|
t.Errorf("unexpected nil node!")
|
||||||
|
}
|
||||||
|
if d.(*File).Name != "e" {
|
||||||
|
t.Errorf("unexpected node!")
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue