From 02e146f3e1663f2d957d2a8d55155d131820f790 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Tue, 2 Mar 2021 08:54:18 -0800 Subject: return err --- weed/filesys/dir_link.go | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'weed/filesys/dir_link.go') diff --git a/weed/filesys/dir_link.go b/weed/filesys/dir_link.go index ba3280f03..29391faeb 100644 --- a/weed/filesys/dir_link.go +++ b/weed/filesys/dir_link.go @@ -83,6 +83,10 @@ func (dir *Dir) Link(ctx context.Context, req *fuse.LinkRequest, old fs.Node) (f return nil }) + if err != nil { + return nil, fuse.EIO + } + // create new file node newNode := dir.newFile(req.NewName, request.Entry) newFile := newNode.(*File) -- cgit v1.2.3 From 5ba4b479f8955cd6e8cb3235753d54948a8cacf2 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Tue, 9 Mar 2021 23:08:38 -0800 Subject: properly lock file.entry object fix https://github.com/chrislusf/seaweedfs/issues/1882 --- weed/filesys/dir_link.go | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) (limited to 'weed/filesys/dir_link.go') diff --git a/weed/filesys/dir_link.go b/weed/filesys/dir_link.go index 29391faeb..606e52fcb 100644 --- a/weed/filesys/dir_link.go +++ b/weed/filesys/dir_link.go @@ -35,15 +35,20 @@ func (dir *Dir) Link(ctx context.Context, req *fuse.LinkRequest, old fs.Node) (f return nil, err } + oldEntry := oldFile.getEntry() + if oldEntry == nil { + return nil, fuse.EIO + } + // update old file to hardlink mode - if len(oldFile.entry.HardLinkId) == 0 { - oldFile.entry.HardLinkId = append(util.RandomBytes(16), HARD_LINK_MARKER) - oldFile.entry.HardLinkCounter = 1 + if len(oldEntry.HardLinkId) == 0 { + oldEntry.HardLinkId = append(util.RandomBytes(16), HARD_LINK_MARKER) + oldEntry.HardLinkCounter = 1 } - oldFile.entry.HardLinkCounter++ + oldEntry.HardLinkCounter++ updateOldEntryRequest := &filer_pb.UpdateEntryRequest{ Directory: oldFile.dir.FullPath(), - Entry: oldFile.entry, + Entry: oldEntry, Signatures: []int32{dir.wfs.signature}, } @@ -53,11 +58,11 @@ func (dir *Dir) Link(ctx context.Context, req *fuse.LinkRequest, old fs.Node) (f Entry: &filer_pb.Entry{ Name: req.NewName, IsDirectory: false, - Attributes: oldFile.entry.Attributes, - Chunks: oldFile.entry.Chunks, - Extended: oldFile.entry.Extended, - HardLinkId: oldFile.entry.HardLinkId, - HardLinkCounter: oldFile.entry.HardLinkCounter, + Attributes: oldEntry.Attributes, + Chunks: oldEntry.Chunks, + Extended: oldEntry.Extended, + HardLinkId: oldEntry.HardLinkId, + HardLinkCounter: oldEntry.HardLinkCounter, }, Signatures: []int32{dir.wfs.signature}, } -- cgit v1.2.3 From 7d57664c2d80f2b7d3eb4cecc57a3275bafee44d Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Fri, 12 Mar 2021 00:36:29 -0800 Subject: mount: internals switch to filer.Entry instead of protobuf --- weed/filesys/dir_link.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'weed/filesys/dir_link.go') diff --git a/weed/filesys/dir_link.go b/weed/filesys/dir_link.go index 606e52fcb..010d0141a 100644 --- a/weed/filesys/dir_link.go +++ b/weed/filesys/dir_link.go @@ -48,7 +48,7 @@ func (dir *Dir) Link(ctx context.Context, req *fuse.LinkRequest, old fs.Node) (f oldEntry.HardLinkCounter++ updateOldEntryRequest := &filer_pb.UpdateEntryRequest{ Directory: oldFile.dir.FullPath(), - Entry: oldEntry, + Entry: oldEntry.ToProtoEntry(), Signatures: []int32{dir.wfs.signature}, } @@ -58,7 +58,7 @@ func (dir *Dir) Link(ctx context.Context, req *fuse.LinkRequest, old fs.Node) (f Entry: &filer_pb.Entry{ Name: req.NewName, IsDirectory: false, - Attributes: oldEntry.Attributes, + Attributes: filer.EntryAttributeToPb(oldEntry), Chunks: oldEntry.Chunks, Extended: oldEntry.Extended, HardLinkId: oldEntry.HardLinkId, @@ -152,12 +152,12 @@ func (file *File) Readlink(ctx context.Context, req *fuse.ReadlinkRequest) (stri return "", err } - if os.FileMode(entry.Attributes.FileMode)&os.ModeSymlink == 0 { + if entry.Attr.Mode&os.ModeSymlink == 0 { return "", fuse.Errno(syscall.EINVAL) } - glog.V(4).Infof("Readlink: %v/%v => %v", file.dir.FullPath(), file.Name, entry.Attributes.SymlinkTarget) + glog.V(4).Infof("Readlink: %v/%v => %v", file.dir.FullPath(), file.Name, entry.Attr.SymlinkTarget) - return entry.Attributes.SymlinkTarget, nil + return entry.Attr.SymlinkTarget, nil } -- cgit v1.2.3 From 69694a17be1ef8817d9afb3a1265e605298e7ab3 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Tue, 16 Mar 2021 02:59:26 -0700 Subject: reverting 7d57664c2d80f2b7d3eb4cecc57a3275bafee44d --- weed/filesys/dir_link.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'weed/filesys/dir_link.go') diff --git a/weed/filesys/dir_link.go b/weed/filesys/dir_link.go index 010d0141a..606e52fcb 100644 --- a/weed/filesys/dir_link.go +++ b/weed/filesys/dir_link.go @@ -48,7 +48,7 @@ func (dir *Dir) Link(ctx context.Context, req *fuse.LinkRequest, old fs.Node) (f oldEntry.HardLinkCounter++ updateOldEntryRequest := &filer_pb.UpdateEntryRequest{ Directory: oldFile.dir.FullPath(), - Entry: oldEntry.ToProtoEntry(), + Entry: oldEntry, Signatures: []int32{dir.wfs.signature}, } @@ -58,7 +58,7 @@ func (dir *Dir) Link(ctx context.Context, req *fuse.LinkRequest, old fs.Node) (f Entry: &filer_pb.Entry{ Name: req.NewName, IsDirectory: false, - Attributes: filer.EntryAttributeToPb(oldEntry), + Attributes: oldEntry.Attributes, Chunks: oldEntry.Chunks, Extended: oldEntry.Extended, HardLinkId: oldEntry.HardLinkId, @@ -152,12 +152,12 @@ func (file *File) Readlink(ctx context.Context, req *fuse.ReadlinkRequest) (stri return "", err } - if entry.Attr.Mode&os.ModeSymlink == 0 { + if os.FileMode(entry.Attributes.FileMode)&os.ModeSymlink == 0 { return "", fuse.Errno(syscall.EINVAL) } - glog.V(4).Infof("Readlink: %v/%v => %v", file.dir.FullPath(), file.Name, entry.Attr.SymlinkTarget) + glog.V(4).Infof("Readlink: %v/%v => %v", file.dir.FullPath(), file.Name, entry.Attributes.SymlinkTarget) - return entry.Attr.SymlinkTarget, nil + return entry.Attributes.SymlinkTarget, nil } -- cgit v1.2.3 From 0f64f5b9c8bea153171c8070f423b9910820bbb1 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Sun, 4 Apr 2021 21:40:58 -0700 Subject: mount: add readOnly option fix https://github.com/chrislusf/seaweedfs/issues/1961 --- weed/filesys/dir_link.go | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'weed/filesys/dir_link.go') diff --git a/weed/filesys/dir_link.go b/weed/filesys/dir_link.go index 606e52fcb..6266e492d 100644 --- a/weed/filesys/dir_link.go +++ b/weed/filesys/dir_link.go @@ -24,6 +24,10 @@ const ( func (dir *Dir) Link(ctx context.Context, req *fuse.LinkRequest, old fs.Node) (fs.Node, error) { + if dir.wfs.option.ReadOnly { + return nil, fuse.EPERM + } + oldFile, ok := old.(*File) if !ok { glog.Errorf("old node is not a file: %+v", old) @@ -105,6 +109,10 @@ func (dir *Dir) Link(ctx context.Context, req *fuse.LinkRequest, old fs.Node) (f func (dir *Dir) Symlink(ctx context.Context, req *fuse.SymlinkRequest) (fs.Node, error) { + if dir.wfs.option.ReadOnly { + return nil, fuse.EPERM + } + glog.V(4).Infof("Symlink: %v/%v to %v", dir.FullPath(), req.NewName, req.Target) request := &filer_pb.CreateEntryRequest{ -- cgit v1.2.3 From 1adc8f86ea66fdc78d148b0a4e848c59a9ce4f86 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Wed, 14 Apr 2021 20:49:15 -0700 Subject: lighten up File object file.entry only exists when file.isOpen --- weed/filesys/dir_link.go | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) (limited to 'weed/filesys/dir_link.go') diff --git a/weed/filesys/dir_link.go b/weed/filesys/dir_link.go index 6266e492d..de330e7a4 100644 --- a/weed/filesys/dir_link.go +++ b/weed/filesys/dir_link.go @@ -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) - if _, err := oldFile.maybeLoadEntry(ctx); err != nil { + oldEntry, err := oldFile.maybeLoadEntry(ctx) + if err != nil { return nil, err } - oldEntry := oldFile.getEntry() if oldEntry == nil { 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 - 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) 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 - newNode := dir.newFile(req.NewName, request.Entry) + newNode := dir.newFile(req.NewName) newFile := newNode.(*File) - if _, err := newFile.maybeLoadEntry(ctx); err != nil { - return nil, err - } return newFile, err @@ -147,7 +144,7 @@ func (dir *Dir) Symlink(ctx context.Context, req *fuse.SymlinkRequest) (fs.Node, return nil }) - symlink := dir.newFile(req.NewName, request.Entry) + symlink := dir.newFile(req.NewName) return symlink, err -- cgit v1.2.3 From 54410ca955cf4078684bca17b4363dc33ef433ed Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Sun, 18 Apr 2021 10:02:02 -0700 Subject: cleaner way to set readonly --- weed/filesys/dir_link.go | 8 -------- 1 file changed, 8 deletions(-) (limited to 'weed/filesys/dir_link.go') diff --git a/weed/filesys/dir_link.go b/weed/filesys/dir_link.go index de330e7a4..acdcd2de4 100644 --- a/weed/filesys/dir_link.go +++ b/weed/filesys/dir_link.go @@ -24,10 +24,6 @@ const ( func (dir *Dir) Link(ctx context.Context, req *fuse.LinkRequest, old fs.Node) (fs.Node, error) { - if dir.wfs.option.ReadOnly { - return nil, fuse.EPERM - } - oldFile, ok := old.(*File) if !ok { glog.Errorf("old node is not a file: %+v", old) @@ -106,10 +102,6 @@ func (dir *Dir) Link(ctx context.Context, req *fuse.LinkRequest, old fs.Node) (f func (dir *Dir) Symlink(ctx context.Context, req *fuse.SymlinkRequest) (fs.Node, error) { - if dir.wfs.option.ReadOnly { - return nil, fuse.EPERM - } - glog.V(4).Infof("Symlink: %v/%v to %v", dir.FullPath(), req.NewName, req.Target) request := &filer_pb.CreateEntryRequest{ -- cgit v1.2.3